SQL Server - LIKE [XXXX]

3

我想要返回特定字段中仅包含文本[XXXX]的值。我的查询会返回包含4位数字的值,因为SQL服务器将[XXXX]视为任何有4个数字的数字。

下面是一个带有值列表的测试查询,以演示问题。

select X.VadDesc 
From (VALUES
('Product AAAA Description'), 
('Product BBBB Description'), 
('Product [XXXX] Description'), 
('Product2 [XXXX] Description'), 
('Product 2 [AAAA] Description'), 
('Product X 1234 Description'),
('Product X 1235 Description'),
('Product X 1236 Description'),
('Product X 1237 Description')
) as X (VadDesc)
Where X.VadDesc like '%[XXXX]%'

我的查询应该只返回:

Product [XXXX] Description
Product2 [XXXX] Description

但它返回:
Product [XXXX] Description
Product2 [XXXX] Description
Product X 1234 Description
Product X 1235 Description
Product X 1236 Description
Product X 1237 Description

我该怎么做呢? 我不仅仅想查找XXXX,因为这可能在我不想返回的行中。


[ABC] 是一个字符范围。它意味着模式应该与 A、B、C 中的任何一个字符匹配。你需要转义 [ 和 ]。 - Panagiotis Kanavos
2个回答

5
使用转义字符Escape character来转义[,像这样'%\[XXXX\]%' {escape '\'}查询
select X.VadDesc 
From (VALUES
('Product AAAA Description'), 
('Product BBBB Description'), 
('Product [XXXX] Description'), 
('Product2 [XXXX] Description'), 
('Product 2 [AAAA] Description'), 
('Product X 1234 Description'),
('Product X 1235 Description'),
('Product X 1236 Description'),
('Product X 1237 Description')
) as X (VadDesc)
Where X.VadDesc like '%\[XXXX\]%' {escape '\'}

SQL Fiddle


不要在意,有些人就是喜欢随意给答案打负分,最好的办法是放下不去。 - Lamak
谁给踩了可能不知道你可以在LIKE中指定自己的转义字符。另一个正确回答也遭到了踩。 - Panagiotis Kanavos
@Lamak - 我更喜欢询问,这样如果有合理的原因,我可以改进我的回答并在此过程中学到新东西。看起来这不是那种情况。 - ughai
我想知道 SQL 中 { } 的作用是什么?我一直使用 WHERE X.VadDesc LIKE '%\[XXXX\]%' ESCAPE '\',并且它一直运行良好。 - Evaldas Buinauskas
1
@EvaldasBuinauskas - 这是可选的 :) - ughai

4
select X.VadDesc 
From (VALUES
('Product AAAA Description'),  
('Product BBBB Description'),  
('Product [XXXX] Description'),  
('Product2 [XXXX] Description'),  
('Product 2 [AAAA] Description'),  
('Product X 1234 Description'),  
('Product X 1235 Description'),  
('Product X 1236 Description'),  
('Product X 1237 Description')  
) as X (VadDesc) 
Where X.VadDesc like '%[[]XXXX]%'

需要注意的是,这个条件也会获取像“Product [XX[]XXX] Description”这样的产品。 - ughai
1
正确的方式是 [[]XXXX]。所有功劳归 @MartinSmith 所有。 - ughai
是的,正确的。我正在寻找它。添加在答案中。感谢 @ughai。 - Chetan Naithani

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接