在空间存在或不存在时搜索邮政编码

时间:2013-04-24 14:05:38

标签: sql

我运行sql搜索查询以显示与邮政编码匹配的记录 说我有邮政编码:

'CB4 1AB'

如果数据库有(有和没有空格)

  • cb41ab
  • cb4 1ab

或我搜索(有和没有空格)

  • cb41ab
  • cb4 1ab

我希望它能带回记录

我该怎么做?

select addr1, addr2, postcode 
from addresses p
where p.postcode LIKE 'cb%'

由于

3 个答案:

答案 0 :(得分:2)

您可以尝试这样的事情:

select addr1, addr2, postcode 
from addresses p
where replace(p.postcode, ' ', '') LIKE 'cb41ab'

答案 1 :(得分:2)

所以,听起来你是为了这个。扩展其他答案:

DECLARE @input VARCHAR(50)
SET @input = 'CB4 1AB'

SELECT addr1, addr2, postcode
FROM addresses p
WHERE REPLACE(p.postcode, ' ', '') = REPLACE(@input, ' ', '')

编辑:我删除了“LIKE”,因为这应该涵盖所有上述情况。

答案 2 :(得分:1)

这个问题我不清楚所以我有多个答案:a)如果你找一个特定的英国邮政编码,就这样做:LIKE'cb4%1ab'。两个版本都将返回(“间隔”和“间距”)。
b)如果你使用LIKE'cb%'也不会给任何麻烦。字段将返回其拥有或没有空格的值。
c)如果要查找邮政编码,专门具有没有空格对于带有空格的邮政编码说LIKE'cb4_1%',对于没有空格的邮政编码说LIKE'cb41%' - 或者甚至更好地寻找字段大小(6个字符长或7个)所以LENGTH([fieldname])= 6 [或者d)用户输入邮政编码,你不知道值是否有空格:我要说代码修改是需要的,不应该在SQL / Server端进行整理。如果不可能由他人添加REPLACE就好了。如果在你的情况下“d”和“a”都为真,则使用REPLACE将空格更改为“%”,因此无论输入是什么以及存储在db中的是什么(字段值有或没有空格),你都会得到结果

最后但并非最不重要的,只是一个建议:如果你有机会“统一”该字段的值,那么(将字段最大长度设置为6和/或更新表并删除空格)来自价值观)
希望这有帮助!

[编辑:添加'd'选项:)]