1

我正在运行一个 sql 搜索查询来显示与邮政编码匹配的记录,比如我有一个邮政编码:

'CB4 1AB'

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

  • cb41ab
  • CB4 1AB

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

  • cb41ab
  • CB4 1AB

我希望它带回记录

我该怎么做?

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

谢谢

4

3 回答 3

2

所以,听起来你正在为此而努力。扩展其他答案:

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

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

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

于 2013-04-24T14:13:25.163 回答
2

你可以尝试这样的事情:

select addr1, addr2, postcode 
from addresses p
where replace(p.postcode, ' ', '') LIKE 'cb41ab'
于 2013-04-24T14:10:23.023 回答
1

我不清楚这个问题,所以我有多个答案:
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”选项:)]

于 2013-04-24T14:22:55.057 回答