SQL條件!=null查不出數據


  今天有一條sql需要某兩個字段不能為空,當然是不能為null也不能為空字符串啦。

  然后就開始寫

1 WHERE
2  ( 3     order_amount != null 
4     and order_amount != '' 
5     and received_amount != null 
6     and received_amount != ''
7  ) 

  查詢結果,一條也沒有!

  網上搜索才發現:

  在SQL中邏輯表達式的可能值包括TRUE、FALSE和UNKNOWN,它們被稱之為三值邏輯。

  在其它的語言中,邏輯表達式只有兩種,要么是true,要么就是false。而sql中卻存在第三個邏輯表達式UnKnown,這個是sql中特有的。從字面意思上我們可以解理該值的意思是:什么都不知道,就是什么都不是。一般情況下我們將任何值(包括NULL本身)與NULL做比較的時候,都會返回UnKnown。而在查詢表達式中(比如where與having中),UnKnown會視為false。所以我們就明白了為什么select * from 表 where 字段=null查不到正確的結果的原因了。

  但並不是在所有場情下UnKnown都會視為false來處理,在check約束中,UnKnown就會視為true來處理。這就是為什么我們設置某個字段的值必須大於等於0的情況下,我們還可以往該字段中插入Null值,那是因為在check約束中null>=0的邏輯結果UnKnown會被當作true來處理。

  所以判斷null值請用 is not

1 WHERE
2 ( 3    order_amount is not null 
4    and order_amount != '' 
5    and received_amount is not null 
6    and received_amount != ''
7 ) 

  sql竟然還有這么個規則,不同語言之間的差距也太大了,每種語言都有自己個性化的東西。為什么程序員難做,因為每種語言都不同,而做一個項目往往要用到幾種語言,而且語言也在發展。希望日后能有一種語言適用於所有場景:數據庫、后台、前端......


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM