Jed*_*Jed 6 t-sql syntax startswith sql-like
我试图通过确保变量的值前缀为括号"["来错误捕获T-SQL变量名称.
以下是我尝试执行此操作的示例:
DECLARE @thing nvarchar(20)
SET @thing = '[55555'
IF(@thing NOT LIKE '[' + '%') --If the value does not start with [ then add it
BEGIN
SET @thing = '[' + @thing
END
PRINT @thing
Run Code Online (Sandbox Code Playgroud)
PRINT上面的例子 [[55555
请注意,@ thing的原始值以括号"["为前缀.我原以为IF条件会因此而返回false"[55555" is LIKE '[' + '%'
为什么IF条件不返回false?更重要的是,我想,检查变量字符串值开头是否存在字符串的正确语法是什么?
编辑 看来,括号"["有一些特殊之处.当我在支架上运行LIKE时,它不能达到我的预期,但是当我不使用支架时,LIKE按照我的预期工作.
看看这些例子:
IF('[' NOT LIKE '[')
BEGIN
PRINT '[ is NOT LIKE ['
END
ELSE
BEGIN
PRINT '[ is LIKE ['
END
IF('StackO' NOT LIKE 'StackO')
BEGIN
PRINT 'STACKO is NOT LIKE StackO'
END
ELSE
BEGIN
PRINT 'STACKO is LIKE StackO'
END
Run Code Online (Sandbox Code Playgroud)
这是两个条件的输出:
[不喜欢[
STACKO就像StackO一样
我相信这可能是因为'['实际上是LIKE运算符语法的一部分,如下所定义:http://msdn.microsoft.com/en-us/library/ms179859.aspx
你需要定义一个转义符来逃避[,像这样:
DECLARE @thing nvarchar(20)
SET @thing = '[55555'
IF(@thing NOT LIKE '\[%' ESCAPE '\' )
BEGIN
SET @thing = '[' + @thing
END
PRINT @thing
Run Code Online (Sandbox Code Playgroud)
另一种解决方案如下:
DECLARE @thing nvarchar(20)
SET @thing = '[55555'
IF(LEFT(@thing,1) <> '[') --If the value does not start with [ then add it
BEGIN
SET @thing = '[' + @thing
END
PRINT @thing
Run Code Online (Sandbox Code Playgroud)