繁体   English   中英

SQL Server找不到带括号的字符串

[英]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 )-因此,您不能在此处使用等号运算符。

可能的选择:

  1. 更正您在where条件中使用的字符串,以便通过强等式查找;

  2. 使用子串:

select *  from Payment where left(message, 26) = 'Wrong param [abonentCode]:'
  1. 使用like运算符(注意,在这种情况下,您必须在模式中添加%来表示任意数量的任何字符,并将开方括号放入封闭的括号中以将其转义,因为成对的方括号在类似的运算符模式中具有特殊含义):

select *  from Payment where message like 'Wrong param [[]abonentCode]:%'

您必须逃脱左括号(用[]包围)。

我会用:

SELECT * FROM Payment WHERE message LIKE 'Wrong param [[]abonentCode]:%'

(还请注意可能需要尾随%)

抱歉,上面应该是LIKE,而不是=

在SQL 2008或2014中执行时工作正常。

参见SQL Fiddle进行演示

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM