2007年5月10日 星期四

在 SQL 中空白字元的問題

在 MS SQL 中,空白字元在【某些的字串函數或比較式】執行結果會與預期的不一樣。
例如:
空白和空字串
IF ( ' ' = '' )
print '相等'
else
print '不相等'
==> 相等

print Len(' ')
==> 0

print Len('123 ')
==> 3
Len 函數會自動將字尾的空白去掉

print Len(' 123')
==>4
Len 函數會計算前面的空白

Q: 那如果要真的求出字串 '123 ' ,長度為 5 ,指令該用什麼??
A: 後面有空白的字元長度,要求出實際長度,不可以使用 Len ,要使用 DataLength 求出【位元組】的長度


※特別注意:DataLength 是求出位元組,所以
當碰上中文字時,每一個字的長度皆為 2
當型態為:nvarchar、nchar 時,不管英文、符號,長度皆為 2當型態為:varchar、char 時,英文、符號的長度皆為 1


EX:
Declare @sWideString nvarchar(20) -- Unicode
Declare @sString varchar(20) -- 一般字元

Set @sWideString = '我是中文字加 ABC '
Set @sString = '我是中文字加 ABC '

print Len(@sWideString) -- 長度 10 (因為 Len 指令會將尾端的空白去掉)
print Len(@sString) -- 長度 10 (因為 Len 指令會將尾端的空白去掉)

print DataLength(@sWideString) -- 長度 26
print DataLength(@sString) -- 長度 19

沒有留言: