SQL服务器使用“IF变量LIKE模式”

时间:2015-08-27 13:46:31

标签: sql-server

为什么这不起作用?

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

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

但这有效

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

更新

为什么会起作用

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

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:2)

尝试声明varchar的大小

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

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

答案 2 :(得分:1)

如果不使用指定的类型长度,它将使用最少的代码页长度。这两个变量分别是varchar 1和nvarchar2。因此,如果范围正常,则实际上。

DECLARE @str varchar = '######'
SELECT  DATALENGTH(@str) 

DECLARE @str1 varchar(20) = '######'
select DATALENGTH(@str1) 

DECLARE @str3 nvarchar = '######'
SELECT  DATALENGTH(@str3) 

DECLARE @str4 nvarchar(20) = '######'
select DATALENGTH(@str4)