我正在运行一个 sql 搜索查询来显示与邮政编码匹配的记录,比如我有一个邮政编码:
'CB4 1AB'
如果数据库有(有和没有空格)
- cb41ab
- CB4 1AB
或者我搜索(有和没有空格)
- cb41ab
- CB4 1AB
我希望它带回记录
我该怎么做?
select addr1, addr2, postcode
from addresses p
where p.postcode LIKE 'cb%'
谢谢
我正在运行一个 sql 搜索查询来显示与邮政编码匹配的记录,比如我有一个邮政编码:
'CB4 1AB'
如果数据库有(有和没有空格)
或者我搜索(有和没有空格)
我希望它带回记录
我该怎么做?
select addr1, addr2, postcode
from addresses p
where p.postcode LIKE 'cb%'
谢谢
所以,听起来你正在为此而努力。扩展其他答案:
DECLARE @input VARCHAR(50)
SET @input = 'CB4 1AB'
SELECT addr1, addr2, postcode
FROM addresses p
WHERE REPLACE(p.postcode, ' ', '') = REPLACE(@input, ' ', '')
编辑:我删除了“LIKE”,因为这应该涵盖上述所有情况。
你可以尝试这样的事情:
select addr1, addr2, postcode
from addresses p
where replace(p.postcode, ' ', '') LIKE 'cb41ab'
我不清楚这个问题,所以我有多个答案:
a)如果您要查找特定的英国邮政编码,请这样做:LIKE 'cb4%1ab'。两个版本都将返回(“间隔”和 wo.space 的)。
b)如果您使用 LIKE 'cb%' 也不会带来任何麻烦。字段将返回它有或没有空格的值。
c)如果您想查找邮政编码,特别是有或没有空格,请说 LIKE 'cb4_1%' 用于有空格的邮政编码,而 LIKE 'cb41%' 用于没有空格的邮政编码 - 甚至更好地寻找字段大小(6 个字符长或 7 个)所以 LENGTH([fieldname]) = 6 [或 7]
d) 用户输入邮政编码,但您不知道 value 中是否有空格:我想说需要修改代码,不应该在 SQL/Server 端进行整理。如果不可能,其他人添加的 REPLACE 就可以了。如果在您的情况下“d”和“a”都为真,请使用 REPLACE 将空间更改为“%”,因此无论输入是什么以及存储在 db 中的内容(字段值有或没有空格),您都会得到结果
最后但同样重要的是,只是一个建议:如果您有机会“统一”字段的值,请执行此操作(将字段最大长度设置为 6 和/或更新表格并从值中删除空间)
希望这会有所帮助!
[编辑:添加了“d”选项:)]