簡體   English   中英

帶有空格的MySQL'LIKE'查詢

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM