搜索邮政编码,当空间存在或者不存在
问题描述:
进出口运行一个sql搜索查询,弹出匹配邮编 说,记录我有一个邮政编码:搜索邮政编码,当空间存在或者不存在
“CB4 1AB”
如果数据库有(有和没有空格)
- cb41ab
- CB4 1AB
或我(有和没有空格)搜索
- cb41ab
- CB4 1AB
我希望它带回记录
我该怎么办呢?
select addr1, addr2, postcode
from addresses p
where p.postcode LIKE 'cb%'
感谢
答
你可以尝试这样的事情:
select addr1, addr2, postcode
from addresses p
where replace(p.postcode, ' ', '') LIKE 'cb41ab'
答
所以,它听起来就像你要争取。扩大其他答案:
DECLARE @input VARCHAR(50)
SET @input = 'CB4 1AB'
SELECT addr1, addr2, postcode
FROM addresses p
WHERE REPLACE(p.postcode, ' ', '') = REPLACE(@input, ' ', '')
编辑:我删除了“喜欢”,因为这应该涵盖以上所有情况。
答
这个问题不清楚,所以我有多个答案:
a)如果你寻找一个特定的英国邮政编码,像这样:像'cb4%1ab'。两个版本都会返回(“间隔”和“空格”)。
b)如果你使用LIKE“%CB”不会给任何烦恼不是。字段将返回它的值或者没有空格。
c)如果你想找到一个邮政编码,具体有或没有空间说LIKE'cb4_1%'为空间的邮政编码和LIKE'cb41%'邮政编码没有空间 - 或者甚至更好查找字段大小,而不是(6个字符长或7),因此LENGTH([字段名])= 6 [或7]
d)用户输入一个邮政编码和您不知道,如果值具有或中没有任何空间:我'说代码修改是必要的,不应该在SQL/Server端进行整理。如果不可能,别人添加的REPLACE就好了。如果“d”和“a”是你的情况属实,使用replace改变空间变成“%”,所以无论输入是和whatver存储在数据库(字段值或没有空间),你会得到结果
最后但并非最不重要的,只是一个建议:如果你有机会到“均匀化”字段的值,它做的(集字段最大长度为6个和/或更新表和值删除空间)
希望这有助于!
[编辑:添加'd'选项:)]
只需在搜索时替换空格? REPLACE(p.postcode,'','')LIKE'cb%''? – LittleBobbyTables 2013-04-24 14:08:08
除了...之外的输出是什么?将示例输出放在Post中,然后避免混淆...... – Pandian 2013-04-24 14:13:08