2015-07-03 108 views
3

我想只返回包含特定字段中的文本[XXXX]的值。 我的查詢返回有4位數字的值,因爲我假設SQL服務器將[XXXX]視爲任何具有4位數字的數字。SQL Server - LIKE [XXXX]

我有一個測試查詢下面的值列表來演示這個問題。

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,因爲這可能是我不想返回的行。

+0

'[ABC]'是字符範圍。這意味着該模式應該與任何字符A,B,C匹配。你需要逃避[ –

回答

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]%' 
+0

有一點需要注意的是,這種情況也會得到'Product [XX [] XXX]'的產品說明' – ughai

+1

正確的方法是'[[] XXXX]'。所有學分[@MartinSmith](http://stackoverflow.com/users/73226/martin-smith) – ughai

+0

是的正確。我正在爲此而努力。在答案中添加。謝謝@ughai。 –

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

+0

]不要打擾問,有些人只是喜歡隨機答案,更好地讓它離開 – Lamak

+0

誰低估可能不知道你可以在'LIKE'中指定你自己的轉義字符。另一個正確的答案也得到了一個downvote –

+0

@Lamak - 我更願意問,所以如果有一個正當的理由,我可以改善我的答案,並在過程中學習新東西。看起來這不是其中之一。 – ughai