T-SQL筆記13_較通用且完善的trim solution_replace跟rtrim,ltrim
SQL 資料欄位裡面空白字元trim掉處理 trim (SQL2017後才支援)
早期版用Ltrim跟Rtrim(比較通用)
因此若有要做trim仍然是以可以上下支援的語法版本比較保險
那怕哪天突然說從SQL Server2017 又退回去用2005 , 2000之類的
設想一下一個登入比對邏輯
有個天兵的在註冊時輸入account id 用email而且給我多1到2個空白甚至是TAB在尾巴...
(可能從excel或outlook直接複製mail來貼輸入)
註冊時
他輸入的account id:'abc@hotmail.com '
結果要登入時
給我輸入account id:'abc@hotmail.com'
這時若直接把已經在DB裡面的欄位值原封不動就拿來比對
頭就痛了~~~
T-SQL
1 2 3 | select * from User where LTRIM(RTRIM(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(account_id, CHAR(0), CHAR(32)), CHAR(9), CHAR(32)) , CHAR(10), CHAR(32)),CHAR(11), CHAR(32)),CHAR(12), CHAR(32)),CHAR(13), CHAR(32)),CHAR(14), CHAR(32))))=@account_id and mb_pwd=@password |
光只仰賴內建的trim (ltrim , rtrim)仍會有未知疑似空白的字元 trim不乾淨的狀況
而在測試跟爬文時發現
SQL內建的trim函數只辨別的了ascii:32的一般空白字元
因此在做LTRIM跟RTRIM之前網路上建議是還要再多做一些取代成32的動作
Ref:
LTRIM RTRIM doesn’t always work
https://www.codeproject.com/Tips/330787/LTRIM-RTRIM-doesn-t-always-work
留言
張貼留言