2012年7月14日 星期六

SQL - 中文長度的問題、LEN、DATALENGTH

因為轉檔的關係,有時候需要把名稱的欄位簡短後塞到簡稱的欄位去,
不過常常都會出現的狀況就是....



即便我已經用了 SUBSTRING 也是一樣!
但是我用 LEN 看一下 SUBSTRING 之後的長度明明就沒有超過呀?
後來上網查了一下有關 LEN 中文長度的搜尋,
然後找到了一個新的函數 DATALENGTH ,
大致上 LEN 的算法是中文算長度1、英文也算長度1,
然後 DATALENGTH 的算法是中文長度2、英文長度1,
中間的差異大概就是一個算字元數,一個算BYTE數吧?
所以當我寫出下面 SQL 的時候,算出來的數字是完全不一樣的!

LEN(name_ch) AS "LEN", DATALENGTH(name_ch) AS "DATALENGTH"



於是乎我就想說那 SUBSTRING 有沒有類似的函數可以用呢?
很遺憾的是我沒有找到,也許 SQL SERVER 2020 會支援吧?
所以當我寫下面那樣的話還是會出現二進位截斷的問題,

SUBSTRING(name_ch, 1, 10)

最後我只好改用 CONVERT 的方式來寫,如下:

CONVERT(VARCHAR(10), name_ch)

如果大家知道 SUBSTRING 有類似 DATALENGTH 的函式可以用的話麻煩通知我一下嘿!

沒有留言:

張貼留言