2015-08-27 49 views
5

爲什麼這不起作用?SQL服務器使用「IF變量LIKE模式」

DECLARE @str varchar = '######' 

IF @str LIKE '%###%' SELECT 1 

但這個工程

IF '######' LIKE '%###%' SELECT 1 

UPDATE

爲什麼這個工程

DECLARE @Comment varchar(255) = '[A-B-C-D]' 

IF @Comment LIKE '%[%-%-%-%]%' SELECT 1 

然而,這不起作用?

DECLARE @Comment nvarchar(255) = '[A-B-C-D]' 

IF @Comment LIKE '%[%-%-%-%]%' SELECT 1 
+0

關於您的編輯,請參閱https://connect.microsoft.com/SQLServer/feed back/details/742841/pattern-syntax-undocumented-difference-in-behavior-between-varchar-vs-nvarchar –

+0

非常感謝 – Fallflame

回答

4

添加到您的變量類型長度。

DECLARE @str varchar = '######' 

IF @str LIKE '%###%' SELECT 1 

是一樣的(隱式轉換將其更改爲 '#')

DECLARE @str varchar(1) = '######' 

/* IF '#' LIKE '%###%' SELECT 1 */ 
IF @str LIKE '%###%' SELECT 1 

這將工作:

DECLARE @str varchar(20) = '######' 

IF @str LIKE '%###%' SELECT 1 
2

嘗試宣告你的VARCHAR

的大小
DECLARE @str varchar(50) = '######' 

SELECT 1 WHERE @str LIKE '%###%'