星期五, 2月 22, 2013

[SQL] 判斷字串中是否有中文字存在

利用字串函數 LEN()、DATALENGTH() 和一個中文字是兩個位元組的特性,來判斷字串中是否有中文字。
  • LEN():回傳字串字元數,但尾端空白不算。
  • DATALENGTH():回傳字串位元組數目。
另一個重點則是欄位資料型態是 char、varchar 或 nchar 、nvarchar,會影響 DATALENGTH() 的回傳值。
DECLARE @Temp TABLE(Data char(10), Data1 char(10) , Data2 varchar(10) , Data3 nchar(10) , Data4 nvarchar(10))

INSERT INTO @Temp
  SELECT '123','123','123','123','123'
  UNION ALL
  SELECT 'ABC','ABC','ABC','ABC','ABC'
  UNION ALL
  SELECT '1A1','1A1','1A1','1A1','1A1'
  UNION ALL
  SELECT '123測試ABC','123測試ABC','123測試ABC','123測試ABC','123測試ABC' -- 中文字
  UNION ALL
  SELECT '789 ','789 ','789 ','789 ','789 ' -- 尾端故意留一個空格

SELECT Data , 
  LEN(Data1) AS [charL], DATALENGTH(Data1) AS [charDL],
  LEN(Data2) AS [varcharL], DATALENGTH(Data2) AS [varcharDL],
  LEN(Data3) AS [ncharL], DATALENGTH(Data3) AS [ncharDL],
  LEN(Data4) AS [nvarcharL], DATALENGTH(Data4) AS [nvarcharDL]
FROM @Temp
[SQL] 判斷字串中是否有中文字 - 1
  • 以 nvarchar 為例子來判斷字串中是否有中文字
SELECT Data4
FROM @Temp
WHERE LEN(CAST(Data4 AS varchar(8000)))
    = DATALENGTH(CAST(RTRIM(Data4) AS VARCHAR(8000)))
[SQL] 判斷字串中是否有中文字 - 2

此作法盲點在於,不是只有中文有此特性,日文和韓文也是,字串中假如同時混雜中文、日文和韓文時,這個作法就無法篩選結果。

沒有留言:

張貼留言