[英]SQL Server not finding the string with brackets
我在Payment(id int, message nvarchar(500))
表中有一条记录,我插入了id = 1和message =“ Wrong param [abonentCode]:”的行。
当我尝试选择带有消息“错误的参数[abonentCode]:”的记录时,sql server返回0行。
我已经尝试过以下语句,但它们均无效:
SELECT * FROM Payment WHERE message = N'Wrong param [abonentCode]:'
SELECT * FROM Payment WHERE message = 'Wrong param [abonentCode]:'
让我们看一下从您在注释中提供的插入字符串获得的二进制数据:
0x57726F6E6720706172616D205B61626F6E656E74436F64655D3A20636F6D
将其投射回varchar可以使我们:
Wrong param [abonentCode]: com
但是您正在尝试找到它
WHERE message = 'Wrong param [abonentCode]:'
注意字符串不匹配(在插入的字符串末尾加上com
)-因此,您不能在此处使用等号运算符。
可能的选择:
更正您在where条件中使用的字符串,以便通过强等式查找;
使用子串:
select * from Payment where left(message, 26) = 'Wrong param [abonentCode]:'
like
运算符(注意,在这种情况下,您必须在模式中添加%
来表示任意数量的任何字符,并将开方括号放入封闭的括号中以将其转义,因为成对的方括号在类似的运算符模式中具有特殊含义): select * from Payment where message like 'Wrong param [[]abonentCode]:%'
您必须逃脱左括号(用[]包围)。
我会用:
SELECT * FROM Payment WHERE message LIKE 'Wrong param [[]abonentCode]:%'
(还请注意可能需要尾随%)
抱歉,上面应该是LIKE,而不是=
在SQL 2008或2014中执行时工作正常。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.