空值是一個比較特殊的欄位。在MySQL資料庫中,在不同的情形下,空值往往代表不同的含義。這是MySQL資料庫的一種特性。如在普通的欄位中(字元型的數據),空值就是表示空值。但是如果將一個空值的數據插入到TimesTamp類型的欄位中,空值就不一定為空。此時為出現什麼情況呢
我先創建了一個表。在這個表中有兩個欄位:User_id(其數據類型是int)、Date(其數據類型是TimesTamp)。現在往這個表中插入一條記錄,其中往Date欄位中插入的是一個NULL空值。可是當我們查詢時,其結果顯示的卻是插入記錄的當前時間。這是怎麼一回事呢?其實這就是在MySQL資料庫中執行SQL語句時經常會遇到的一個陷阱:空值不一定為空。在操作時,明明插入的是一個空值的數據,但是最後查詢得到的卻不是一個空值。
在MySQL資料庫中,NULL對於一些特殊類型的列來說,其代表了一種特殊的含義,而不僅僅是一個空值。對於這些特殊類型的列,各位讀者主要是要記住兩個。一個就是筆者上面舉的TimesTamp數據類型。如果往這個數據類型的列中插入Null值,則其代表的就是系統的當前時間。另外一個是具有auto_increment屬性的列。如果往這屬性的列中插入Null值的話,則系統會插入一個正整數序列。而如果在其他數據類型中,如字元型數據的列中插入Null的數據,則其插入的就是一個空值。
B. sql 如何查詢 空值的欄位
sql查詢空值的欄位寫法:SELECT A.欄位 FROM student A WHERE A.欄位 LIKE'% %' (student為表名)
查詢類似空值的寫法:
1、查詢名稱有退格鍵:select * from t_bd_item_info where charindex(char(8),item_name) > 0 go
2、查詢名稱有製表符tab:select * from t_bd_item_info where charindex(char(9),item_name) > 0 go
3、查詢名稱有換行:select * from t_bd_item_info where charindex(char(10),item_name) > 0 go
4、查詢名稱有回車:select * from t_bd_item_info where charindex(char(13),item_name) > 0 go
5、查詢名稱的空格(前空格、後空格、所有空格):select * from t_bd_item_info where isnull(charindex(' ',item_name),0) > 0go
6、查詢名稱的單引號:select * from t_bd_item_info where charindex(char(39),item_name) > 0 go
7、查詢名稱的雙單引號:select * from t_bd_item_info where charindex(char(34),item_name) > 0 go
(2)sql取null字元擴展閱讀
1、處理名稱有退格鍵
update t_bd_item_info set item_name = replace(item_name,char(8),'')
where charindex(char(9),item_name) > 0 go
2、處理名稱有製表符tab
update t_bd_item_info set item_name = replace(item_name,char(9),'')
where charindex(char(9),item_name) > 0 go
3、處理名稱有換行
update t_bd_item_info set item_name = replace(item_name,char(10),'')
where charindex(char(10),item_name) > 0 go
4、處理名稱有回車
update t_bd_item_info set item_name = replace(item_name,char(13),'')
where charindex(char(13),item_name) > 0 go
5、處理名稱的空格(前空格、後空格、所有空格)
update t_bd_item_info set item_name = replace(rtrim(ltrim(item_name)),' ','')
where isnull(charindex(' ',item_name),0) > 0go
6、處理名稱的單引號
update t_bd_item_info set item_name = replace(item_name,char(39),'')
where charindex(char(39),item_name) > 0 go
7、處理名稱的雙單引號
update t_bd_item_info set item_name = replace(item_name,char(34),'')
where charindex(char(34),item_name) > 0 go
C. sql2000 'NULL' 字元
呵呵 樓主可能對NULL的認識有一點問題,NULL並不是『空』的意思,它表示『未知』,也就是說欄位的值為NULL時,該欄位的值可能是1,可能是A,可能是『王麻子』。所以對NULL的判斷不能用『=』應該寫為『IS NULL』或者『IS NOT NULL』,你可以試一下'NULL = NULL'的返回值是FALSE。
這樣的話樓主的第二條語句的問題就解決了:
exec( 'update 住戶資料 set ' +@name + ' = null where ' +@name+ ' IS NULL')
而第一條語句的錯誤為拼寫錯誤,
exec( 'update 住戶資料 set ' +@name + ' = null where ' +@name+ ' = 'NULL'')
^這里
前面的+ ' = ' 標志著字元串連接的完成(因為後面的NULL沒被'+'連接,跟沒被''所包裹),修改得話可以和上面的一樣,為了便於你理解,修正如下:
exec( 'update 住戶資料 set ' +@name + ' = null where ' +@name+ ' = ' + 'NULL')
這樣NULL就被作為新字元串的一部分連接起來了。
希望能幫到你~
D. 怎麼在資料庫中查找為null的sql語句
如果是空字元串就 欄位名= ''
如果是不等於空字元 欄位名 <> ''
如果是 null值 就是 欄位名 is null 或者 not null
E. SQL中如何判斷欄位NULL或者為空字元串
select case when a is null then b when a='' then b else a end from 表 create table test
(
a varchar(20),
b varchar(10)
)
insert into test (b) values('b')
insert into test (a,b) values('','b')
insert into test(a,b) values ('a','b')
select case when a is null then b when a='' then b else a end from test
復制代碼 ,粘貼,執行,直接可以看到結果