LIKE子句中的变量

时间:2013-02-21 11:43:37

标签: sql

我在名为Addresses的表中有一些数据:

HouseNumber Address
32          32 The Street
1           2 The Way
4           4 The Street
5           5 The Street

我试图找到不正确的众议院号码 我认为下面的查询将返回'2 The Way',但事实并非如此。

select Address
FROM   Addresses
WHERE  HouseNumber NOT LIKE '%' + Address + '%'

有没有像上面的查询那样简单的方法,或者我是否必须编写存储过程?

4 个答案:

答案 0 :(得分:1)

您必须交换AddressHouseNumber。此外,由于您的AddressHouseNumber开头,因此您可以使您的查询模式正确并且可以浏览。

select Address
FROM   Addresses
WHERE  Address NOT LIKE HouseNumber + ' %'

答案 1 :(得分:0)

不应该是:

select Address FROM Addresses WHERE Address NOT LIKE '%' + HouseNumber + '%'

...

答案 2 :(得分:0)

也许你应该以相反的方式尝试

select Address FROM Addresses WHERE Address NOT LIKE '% ' + HouseNumber + ' %'

这样它会尝试将'1'(housenumber)与'2 way'匹配。而不是相反。

答案 3 :(得分:0)

您需要从地址中提取门牌号,并根据门牌号栏(未经测试)进行检查:

select Address
from   Addresses
where  cast(Housenumber as int) != cast(left(Address, instr(Address, " ")-1) as int)

这假设门牌号码始终位于地址的开头,门牌号码与地址的其余部分之间有空格。