「PostgreSQL」PostgreSQL模糊查詢, postgres特殊符號模糊查詢
阿新 • • 發佈:2019-02-11
在做WEB專案時, 經常會需要使用搜索功能, 而且大多數時候是需要模糊搜尋, 以下將對模糊搜尋進行介紹:
通常我們是這樣寫的:
SELECT * FROM 表名 WHERE 欄位 LIKE ('%' || '關鍵字' || '%')
或者這樣寫:
SELECT * FROM 表名 WHERE 欄位 ~* '關鍵字'
但是這兩種是有風險的!
可能出現的問題:
invalid regular expression: quantifier operand invalid
出現原因: 使用 ~* 符號進行模糊查詢時, 關鍵字使用 *
invalid regular expression: invalid escape \ sequence
出現原因: 使用 ~* 符號進行模糊查詢時, 關鍵字使用 \
等等各種因為特殊符號產生的問題, 不一一舉例了
類似的, 使用特殊符號作為關鍵字時, 就會出現類似的報錯問題.
所以, 既是模糊搜尋,搜尋的內容又允許帶有特殊符號的時候, 就必須對此情況進行處理!
解決方案:
同事們經過摸索, 研究出來的超厲害的解決方案:
SELECT * FROM 表名 WHERE 欄位 ILIKE regexp_replace(concat('%','關鍵字','%'),'\\','\\\','g')
經過測試, 你在關鍵字內輸入任何特殊符號, 都能正常的進行查詢!