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

SQL Server找不到带括号的字符串,sql,sql-server,tsql,Sql,Sql Server,Tsql,我在Paymentid int表中有一条记录,消息是nvarchar500,我插入了id=1且消息=错误参数[ABONTCODE]的行: 当我尝试选择带有错误参数[ABONTCODE]消息的记录时:sql server返回0行 我试过这些说法,但都不管用: SELECT * FROM Payment WHERE message = N'Wrong param [abonentCode]:' SELECT * FROM Payment WHERE message = 'Wrong param [a

我在Paymentid int表中有一条记录,消息是nvarchar500,我插入了id=1且消息=错误参数[ABONTCODE]的行:

当我尝试选择带有错误参数[ABONTCODE]消息的记录时:sql server返回0行

我试过这些说法,但都不管用:

SELECT * FROM Payment WHERE message = N'Wrong param [abonentCode]:'
SELECT * FROM Payment WHERE message = 'Wrong param [abonentCode]:'

必须用[]将开口括号括起来

我将使用:

SELECT * FROM Payment WHERE message LIKE 'Wrong param [[]abonentCode]:%'
还要注意可能需要一个尾随百分比


很抱歉,上面应该是这样的,而不是=

您必须用[]来避开它周围的开口括号

我将使用:

SELECT * FROM Payment WHERE message LIKE 'Wrong param [[]abonentCode]:%'
还要注意可能需要一个尾随百分比


对不起,上面应该是这样的,而不是=

让我们看看从您在注释中提供的插入字符串中获得的二进制数据:

0x57726F6E6720706172616D205B61626F6E656E74436F64655D3A20636F6D
将其返回到varchar会给我们带来:

Wrong param [abonentCode]: com
但你想把它当作

WHERE message = 'Wrong param [abonentCode]:'
请注意,插入字符串末尾的字符串不匹配,因此不能在此处使用相等运算符

可能的选择:

在where条件中使用的正确字符串,以便通过强等式进行查找

使用子字符串:

使用类似运算符注意:在这种情况下,您必须向模式中添加%以表示任意数量的任何字符,并将开始方括号放在封闭方括号中以转义,因为这对方括号在类似运算符模式中具有特殊意义:
让我们看看从注释中提供的插入字符串中获得的二进制数据:

0x57726F6E6720706172616D205B61626F6E656E74436F64655D3A20636F6D
将其返回到varchar会给我们带来:

Wrong param [abonentCode]: com
但你想把它当作

WHERE message = 'Wrong param [abonentCode]:'
请注意,插入字符串末尾的字符串不匹配,因此不能在此处使用相等运算符

可能的选择:

在where条件中使用的正确字符串,以便通过强等式进行查找

使用子字符串:

使用类似运算符注意:在这种情况下,您必须向模式中添加%以表示任意数量的任何字符,并将开始方括号放在封闭方括号中以转义,因为这对方括号在类似运算符模式中具有特殊意义:
在SQL 2008或2014中执行时工作正常


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


排除where子句后会得到什么结果?刚刚在SQL Server 2014中测试过,效果良好。无法复制该问题。有什么想法吗?我可以检查行中是否有一些特殊字符,如回车或类似的字符吗?根据这一点,在2008年和2014年都可以正常工作。@Davidlekishvili,您可以。只需将id为1的行中的字符串强制转换为varbinary,并检查符号的ascii码。还可以将您试图查找的字符串强制转换为varbinary并检查代码。当您排除where子句时,会得到什么结果?刚刚在SQL Server 2014中测试过,效果良好。无法复制该问题。有什么想法吗?我可以检查行中是否有一些特殊字符,如回车或类似的字符吗?根据这一点,在2008年和2014年都可以正常工作。@Davidlekishvili,您可以。只需将id为1的行中的字符串强制转换为varbinary,并检查符号的ascii码。也可以将您试图找到的字符串强制转换为varbinary和check代码。坦率地说,这种转义仅在like运算符的情况下才需要,因为一对方括号仅在该运算符模式中具有特殊意义,而在字符串中通常不具有特殊意义。坦率地说,这种转义仅在like运算符的情况下才需要,因为一对方形制动器仅在该运算符模式中具有特殊意义,而在字符串中通常不具有特殊意义。