關於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個"~",這...有夠貼心了吧~~。

參考來源

這個網誌中的熱門文章

[TFS] 分支與合併

[.NET Core] 將專案發行至IIS