2016-11-17 85 views
3

我有一張表,其中一些行有一些空白cells。我試圖用IS NULL函數選擇這樣的行。但查詢選擇0行。空字符串對NULL

select * from zzz_fkp_registration_female where fname is null; 
(0 row(s) affected) 

現在我改變了我的查詢:

select * from zzz_fkp_registration_female where fname is null or fname =''; 

我得到了想要的結果。

爲什麼IS NULL不提供結果?由於單元格爲空,因此IS NULL''之間有何區別。請解釋。

+0

在SQL NULL被定義爲NULL和「」指的是一些空值 –

+0

「」空字符串:我們可以說沒有任何價值。但是NULL意味着我們不能說沒有價值。這意味着可能有價值,但它的未知。這就是NULL與空字符串不同的原因。 –

+0

不允許零長度的字符串作爲名稱(有一個約束或觸發器)。在這種情況下使用NULL。 – jarlh

回答

3

它們之間的某些區別:

  • NULL可以分配給任何類型的,相對於其中將不與日期/數字字段兼容空字符串。
  • NULL是未知值,它不具有一個值,而不是一個空字符串,這是一個值,但空之一。
  • 據我所知,NULL不應該捕獲內存而不是空字符串。
  • null = null將導致null而不是''=''這將導致TRUE
+0

我們如何使用空或空字符串分隔單元格? – nischalinn

+0

通過選擇單元格IS NULL和單元='' – mansi

+0

你是什麼意思分開? – sagi

0

他找不到NULL,因爲它不具有價值

空字符串值,但其空。

只有當它能夠與其他值進行比較的值

1

你可以有你的查詢修改如下:

select * from zzz_fkp_registration_female where isnull(fname,'') = ''; 

這個查詢將導致所有空白單元,以及與空值單元格。

注:

  1. NULL值表示缺少未知的數據。
  2. 空白數據是在輸入過程中輸入爲空白的實際數據。
0
  • 空值是沒有值。一個空字符串是一個值,但只是空的。

  • 空是特殊的數據庫。

  • 空無邊,它可用於字符串,整數,日期等的數據庫字段。
  • NULL沒有分配任何內存,NUll值的字符串只是一個指向內存中任何地方的指針。然而,雖然存儲在內存中的值是「」,但空值被分配給內存位置。

通過使用NULL,您可以區分「put no data」和「put empty data」。

一些更差異:

NULL的長度爲NULL,一個空字符串的長度爲0的NULL 空字符串之前進行排序。 COUNT(消息)將計數空字符串,但不計數NULL 您可以使用綁定變量搜索空字符串,但不能爲NULL。此查詢:

SELECT * 
FROM mytable 
WHERE mytext = ? 

永遠不會匹配mytext中的NULL,無論您從客戶端傳遞什麼值。要匹配的NULL,你將不得不使用其他查詢

SELECT * FROM mytable WHERE mytext IS NULL