今天在做字串資料處理時,跑處來的結果一直有問題,後來逐步測試才發現,
寫了那麼久的程式,我竟然沒有注意到,如果使用
LEN()函數,
空白字元如果位於字串的後方,計算字串長度時,是會省略不計算的,
select '前面空白'=CONVERT(VARCHAR,LEN(' 123ab')),
'中間空白'=CONVERT(VARCHAR,LEN('12 3ab')),
'後面空白'=CONVERT(VARCHAR,LEN('123ab '))
/*----------------------------------結果----------------------------------*/
前面空白 中間空白 後面空白
------------------------------ ------------------------------ ------------------------------
6 6 5
這次需要改用
DATALENGTH()計算,才可以正確抓取字串長度!
select '前面空白'=CONVERT(VARCHAR,DATALENGTH(' 123ab')),
'中間空白'=CONVERT(VARCHAR,DATALENGTH('12 3ab')),
'後面空白'=CONVERT(VARCHAR,DATALENGTH('123ab '))
/*----------------------------------結果----------------------------------*/
前面空白 中間空白 後面空白
------------------------------ ------------------------------ ------------------------------
6 6 6
但是有一點需要注意,DATALENGTH()是計算位元組,
當資料型態是NCHAR()、NVARCHAR()時,取得的長度會不一樣!
select 'VARCHAR'=CONVERT(VARCHAR,DATALENGTH(CONVERT(VARCHAR,'2238# '))),
'NVARCHAR'=CONVERT(VARCHAR,DATALENGTH(CONVERT(NVARCHAR,'2238# '))),
'NCHAR'=CONVERT(VARCHAR,DATALENGTH(CONVERT(NCHAR,'2238# ')))
/*----------------------------------結果----------------------------------*/
VARCHAR NVARCHAR NCHAR
------------------------------ ------------------------------ ------------------------------
6 12 60