寫了那麼久的程式,我竟然沒有注意到,如果使用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
沒有留言:
張貼留言