Sql LIKE子句中的Cap符号(^)工作不正常

Sql LIKE子句中的Cap符号(^)工作不正常,sql,sql-server,string,sql-server-2005,sql-like,Sql,Sql Server,String,Sql Server 2005,Sql Like,请参见下面的示例 where '1|2|||1|' like '%%|%%|%%|%%|[^3]|' /* it will return true if the string between last two pipe symbols is not like '3'*/ 上面的代码工作正常 同样,我需要为最后两个管道之间的字符串构建一个表达式,不像10或11。或者至少不像10。就这样试过了 where '1|2|||8|' like '%%|%%|%%|%%|[^10]|' 上述语句返回1,

请参见下面的示例

where '1|2|||1|' like '%%|%%|%%|%%|[^3]|' /* it will return true if the string between last two pipe symbols is not like '3'*/
上面的代码工作正常

同样,我需要为最后两个管道之间的字符串构建一个表达式,不像10或11。或者至少不像10。就这样试过了

where '1|2|||8|' like '%%|%%|%%|%%|[^10]|'
上述语句返回1,0和10的false,而不是仅返回10。因此,上面的查询将1视为单独的字符串,将0视为单独的字符串。 我希望表达式仅当最后两个管道之间的字符串为10时才返回false。不适用于1或0

我还试着用花括号。但它的表现有所不同

  where '1|2|||8|' like '%%|%%|%%|%%|[{^10}]|
此外,如果可以为最后两个管道之间的-string派生表达式,则不应为10或11

注意:我不能在查询中使用“”或“不喜欢”


有什么想法吗?

您需要分别检查每个字符

例如“…非1后跟非(0或1)”


谢谢你的回答。但是我需要一个表达式,该表达式应该为1和0返回true,为10返回false。@Sivakumar:我不允许这样,它没有那么强大。你说你不能有或,所以我建议使用CLR函数来允许regex是的,我也在使用regex,正如你在我的问题中看到的那样。它不仅仅适用于一位数以上的数字。我们需要知道在正则表达式中将字符分组为单个字符串的方法。应该有一种方法可以做到这一点。但是找不到它。我经常冲浪。@Sivakumar:不,如果你不能使用NOT/OR,就不能使用LIKE。LIKE不是regex。
where '1|2|||8|' like '%%|%%|%%|%%|[^1][^01]|'