[MS-SQL] 「空白」字元與「空」字串
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 203.73.218.165
在資料表中,如果有某一個字串欄位沒有資料,通常我會建議塞一個「空字串」進去,
也就是「''」(兩個單引號連續而沒有間隔)。空字串跟NULL一樣不佔空間,但NULL的
邏輯判斷比較特別(只能用 is ,不能用 > < =),而空字串則能用一般的邏輯運算子。
不過,現在發現空字串也有自己的問題,應該說,別人的問題會影響到它,也就是
「空白」。在MSSQL中,一個空白字元(' '),甚至是N個空白字元(' ')
居然是等於「空字串」('')的!
也就是說,在MSSQL中,' '='' 是成立的,這實在是太不符合常理了。類似的
問題還出現在len()這個取得字串長度的函式,它也會忽略空白字元,例如len(' ')=0
不過,當字串裡有其他非空白字元時,又不一樣了,例如len(' 123 ')=4,不是3,
也不是5,因為只有非空白字元「後面」的空白會被忽略,前面的不會
(len(' 123')=4,len('123 ')=3)。
所以有用到空白字元的查詢,必須用一些方法來躲避這些問題。SQL的Datalength()函數
與len()類似,但它就不會忽略空白字元,因為它傳回的結果是「bytes」數而不是字數。
但也因為這樣,如果字串是nvarchar的字串,傳回的「bytes」數會是字數的「兩倍」,
可能除以二才是你要的結果。
Datalength()函數也可以用來判斷某個字串是不是有值,不是空字串也不是NULL,但空白
字元算是有值,這時候就可以下Datalength(@Str)>0,不管 '' 還是NULL都不符合條件,
但' '這樣的空白字串則會成立,也符合我們的直覺。
--
推文自動更新已關閉
留言