[英]MySQL 'LIKE' query with spaces
我有一個帶有郵政編碼的MySQL數據庫,有時在數據庫中,郵政編碼中有空格(例如NG1 1AB),有時候沒有(例如NG11AB)。 同樣在PHP查詢中從數據庫中讀取搜索數據庫的人可能會添加空格。 我嘗試過使用LIKE的各種不同的格式,但似乎找不到有效的搜索方式,這樣任何一端都會產生相同的相應行(例如,搜索NG11AB或NG1 1AB來調出'Bob Smith'或者相應的行字段是什么)。
有什么建議么?
我甚至不打擾LIKE
或正則表達式,只需刪除空格並比較字符串:
SELECT *
FROM mytable
WHERE LOWER(REPLACE(post_code_field, ' ', '')) = LOWER(REPLACE(?, ' ', ''))
請注意,如果用戶輸入小寫后置代碼,我還會將兩個值都轉換為小寫,以便仍然正確匹配。
SELECT *
FROM MYTABLE
WHERE REPLACE(MYTABLE.POSTCODE, ' ', '') LIKE '%input%'
確保您的PHP輸入也被修剪
假設您的列中不僅包含郵政編碼:在執行類似測試之前刪除所有空格:
where replace(postcode, ' ', '') like '%NG11AB%'
如果您的列中只包含郵政編碼:
where replace(postcode, ' ', '') = 'NG11AB'
要么
where postcode like 'N%G%1%1%A%B'
正則表達式將適用於這兩種情況。 以下正則表達式允許每個字母之間的可選空格:
where postcode rlike 'N ?G ?1 ?1 ?A ?B' -- use regex
您可以使用匹配0或更多字符的"*"
元字符,例如
像“NG1 * 1AB”
匹配NG11AB和NG1 1AB
更多示例: http : //www.shayanderson.com/mysql/mysql-regex-metacharacters.htm
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.