關於Sql ~ 波浪字元
今天同事問EntityFramework在StartWith,Contain等方法所產生的SQL在結尾會有ESCAPE '~' 例:
SELECT * FROM T WHERE Title LIKE 'foo%' ESCAPE '~'
查了相關文章後,只知ESCAPE是用來查詢資料內有含萬用字元,例: %_[]^等,但沒有關於"~"是要作什麼用的。
後來經測試,才知道"~"是代表所有的萬用字元,意思為本來你可能要使用ESCAPE '%_[^' 來查有這些符號的資料,而只要用ESCAPE '~' 即可
SELECT * FROM T WHERE Title LIKE 'foo%' ESCAPE '%_[]^'
等同
SELECT * FROM T WHERE Title LIKE 'foo%' ESCAPE '~'
依照上述,波浪字元代表所有萬用字元,那如果資料若有含"~"的話,是否可以查詢?
SELECT * FROM T WHERE (Title LIKE '~%' ESCAPE '%_[]^')
結果:查不到
修改SQL,將"~"改成2個
SELECT * FROM T WHERE (Title LIKE '~~%' ESCAPE '%_[]^')
結果:OK
Ps:EntityFramework在要進行like比對時,若輸入的值有含"~"會自動換成2個"~",這...有夠貼心了吧~~。
參考來源