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

留言

這個網誌中的熱門文章

何謂淨重(Net Weight)、皮重(Tare Weight)與毛重(Gross Weight)

Architecture(架構) 和 Framework(框架) 有何不同?_軟體設計前的事前規劃的藍圖概念

經得起原始碼資安弱點掃描的程式設計習慣培養(五)_Missing HSTS Header