[MS-SQL] 「空白」字元與「空」字串

在資料表中,如果有某一個字串欄位沒有資料,通常我會建議塞一個「空字串」進去, 也就是「''」(兩個單引號連續而沒有間隔)。空字串跟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都不符合條件, 但' '這樣的空白字串則會成立,也符合我們的直覺。 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 203.73.218.165
推文自動更新已關閉

留言

這個網誌中的熱門文章

[閒聊] 女生會觀察男生手上的手錶嗎?

[翻譯] Nosleep-一群變態鎖定觀看YouTube的孩童