【问题标题】:Cap symbol (^) in LIKE Clause not working properlyLIKE 子句中的大写符号 (^) 无法正常工作
【发布时间】:2013-05-15 12:21:42
【问题描述】:

看下面的例子

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 而不是 10 返回 false。因此上面的查询将 1 视为单独的字符串,将 0 视为单独的字符串。 我期待一个表达式,仅当最后两个管道之间的字符串为 10 时才会返回 false。不是 1 或 0。

我也尝试过使用花括号。但它的行为不同。

  where '1|2|||8|' like '%%|%%|%%|%%|[{^10}]|

另外,如果你可以派生一个表达式 - 最后两个管道之间的字符串不应该是 10 或 11。

注意:我不能在查询中使用 'OR' 或 'NOT LIKE'

有什么想法吗?

【问题讨论】:

    标签: sql sql-server string sql-server-2005 sql-like


    【解决方案1】:

    您需要分别检查每个字符

    像“...非 1 后跟非(0 或 1)”

    where '1|2|||8|' like '%%|%%|%%|%%|[^1][^01]|'
    

    【讨论】:

    • 感谢您的回答。但我需要一个表达式,它应该为 1 和 0 返回 true,为 10 返回 false。
    • @Sivakumar:LIKE 不允许这样做,它没有那么强大。你说你不能有 NOT 或 OR,所以我建议一个 CLR 函数来允许正则表达式
    • 是的,我也在使用正则表达式,正如您在我的问题中看到的那样。它不仅仅适用于一位以上的数字。事情是需要知道在正则表达式中将字符分组为单个字符串的方式。
    • 应该有办法做到这一点。但是找不到。我经常上网。
    • @Sivakumar:不,如果你不能使用 NOT/OR,就没有使用 LIKE。 LIKE 不是正则表达式。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-27
    • 2013-01-30
    相关资源
    最近更新 更多