我运行sql搜索查询以显示与邮政编码匹配的记录 说我有邮政编码:
'CB4 1AB'
如果数据库有(有和没有空格)
或我搜索(有和没有空格)
我希望它能带回记录
我该怎么做?
select addr1, addr2, postcode
from addresses p
where p.postcode LIKE 'cb%'
由于
答案 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'选项:)]