5

我有一个带有邮政编码的 MySQL 数据库,有时在数据库中邮政编码中有空格(例如 NG1 1AB),有时没有(例如 NG11AB)。类似地,在从数据库中读取的 PHP 查询中,搜索数据库的人可能会添加空格或不添加空格。我已经使用 LIKE 尝试了各种不同的格式,但似乎找不到有效的搜索方式,以便任何一端都会显示相同的相应行(例如,搜索 NG11AB 或 NG1 1AB 以显示“Bob Smith”或任何相应的行字段)。

有什么建议么?

4

4 回答 4

10

我什至不会打扰LIKE或正则表达式,只需删除空格并比较字符串:

SELECT *
FROM mytable
WHERE LOWER(REPLACE(post_code_field, ' ', '')) = LOWER(REPLACE(?, ' ', ''))

请注意,如果用户输入小写的邮政编码,我还将这两个值转换为小写以保持正确匹配。

于 2013-08-30T08:57:28.540 回答
3
SELECT *
FROM MYTABLE
WHERE REPLACE(MYTABLE.POSTCODE, ' ', '') LIKE '%input%'

确保您的 PHP 输入也被修剪

于 2013-08-30T08:56:57.033 回答
0

假设您的列中不仅仅是邮政编码:在进行类似测试之前删除所有空格:

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
于 2013-08-30T08:56:47.503 回答
0

您可以使用"*"匹配 0 个或更多字符的元字符,例如
LIKE "NG1*1AB"
匹配 NG11AB 和 NG1 1AB
更多示例:http ://www.shayanderson.com/mysql/mysql-regex-metacharacters.htm

于 2013-08-30T09:02:04.950 回答