我有一个带有邮政编码的 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 个或更多字符的元字符,例如
LIKE "NG1*1AB"
匹配 NG11AB 和 NG1 1AB
更多示例:http ://www.shayanderson.com/mysql/mysql-regex-metacharacters.htm