MySQL';比如';带空格的查询

MySQL';比如';带空格的查询,mysql,sql,Mysql,Sql,我有一个带有邮政编码的MySQL数据库,有时数据库中的邮政编码中有空格(如NG1 1AB),有时没有空格(如NG11AB)。简单地说,在PHP查询中,从数据库中读取数据的人可以在数据库中添加空格,也可以不添加空格。我尝试了使用LIKE的各种不同格式,但似乎找不到有效的搜索方法,因此它的任何一端都会出现相同的对应行(例如,搜索NG11AB或NG1 1AB以显示“Bob Smith”或任何对应的行字段) 有什么建议吗?假设您的专栏中不仅仅包含邮政编码:在执行类似测试之前删除所有空格: where r

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


有什么建议吗?

假设您的专栏中不仅仅包含邮政编码:在执行类似测试之前删除所有空格:

where replace(postcode, ' ', '') like '%NG11AB%'

如果您的列中只有邮政编码:

where replace(postcode, ' ', '') = 'NG11AB'


Regex将适用于这两种情况。以下正则表达式允许每个字母之间使用可选空格:

where postcode rlike 'N ?G ?1 ?1 ?A ?B' -- use regex

请确保您的PHP输入也被修剪

我甚至不需要像或regex那样处理
,只需删除空格并比较字符串:

SELECT *
FROM mytable
WHERE LOWER(REPLACE(post_code_field, ' ', '')) = LOWER(REPLACE(?, ' ', ''))
请注意,如果用户输入小写邮政编码,我还会将这两个值转换为小写,以便仍然正确匹配。

您可以使用匹配0个或更多字符的
“*”
元字符,例如
像“NG1*1AB”
匹配NG11AB和NG1 1AB

更多示例:

请向我们展示您的尝试。如果此人也使用大写搜索,查询是否也有效?是的,会。此查询将两个值转换为小写,然后比较它们。太棒了!谢谢我现在就要实施:)对不起,如果我错了,只需要在这里澄清一下。mysql搜索不区分大小写吗??我们需要函数lower()吗?@Mani默认情况下,它不区分大小写,您需要转换。您可以更改排序规则-但是为什么?Cheers,在PHP脚本的另一部分中使用了这一点-非常简洁。
SELECT *
FROM MYTABLE
WHERE REPLACE(MYTABLE.POSTCODE, ' ', '') LIKE '%input%'
SELECT *
FROM mytable
WHERE LOWER(REPLACE(post_code_field, ' ', '')) = LOWER(REPLACE(?, ' ', ''))