【问题标题】:REGEXP_LIKE conversion in SQL Server T-SQLSQL Server T-SQL 中的 REGEXP_LIKE 转换
【发布时间】:2013-04-25 07:17:44
【问题描述】:

我在需要转换为 SQL Server 的旧报告中遇到了这一行。

REGEXP_LIKE (examCodes, learner_code)

examCodes 是源代码,learner_code 是模式。我知道 SQL Server 没有 REGEXP_LIKE 并且大多数地方都告诉你使用 PATINDEX。

我认为这会起作用:

PATINDEX(learner_code, examCodes)

但我得到了错误:

Msg 4145, Level 15, State 1, Line 54
An expression of non-boolean type specified in a context where a condition is expected, near 'WHERE'.

在 MSDN 上,语法被指定为,

PATINDEX ('%pattern%',expression) 

但是 learner_code 是一个字段,我不能指定模式?

我一开始并没有写这份报告,所以我对它在寻找什么模式感到困惑。

非常感谢

【问题讨论】:

    标签: sql sql-server oracle design-patterns patindex


    【解决方案1】:

    ORACLE 的 REGEXP_LIKE 支持实际的正则表达式,PATINDEX 仅支持 % 和 _ 通配符、[] 列表/范围和 ^ 列表/范围否定。

    【讨论】:

      【解决方案2】:
      WHERE PATINDEX ('%pattern%',expression)  !=0
      

      如果找到模式,则 PATINDEX 返回非零值,您需要在 WHERE 子句中进行比较。 WHERE 子句后面必须跟返回真/假的比较操作。

      可能是您使用 PATINDEX 而不进行比较,这就是错误消息在 WHERE 子句附近显示非布尔表达式的原因。

      使用通配符搜索模式learner_code

      WHERE PATINDEX ('%' + CAST(learner_code AS VARCHAR) +'%',examCodes)  !=0
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-06-03
        • 1970-01-01
        • 1970-01-01
        • 2019-06-12
        • 1970-01-01
        • 2013-10-24
        相关资源
        最近更新 更多