7

我在需要转换为 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 是一个字段,我不能指定一个模式?

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

非常感谢

4

2 回答 2

6
WHERE PATINDEX ('%pattern%',expression)  !=0

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

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

使用通配符搜索模式learner_code

WHERE PATINDEX ('%' + CAST(learner_code AS VARCHAR) +'%',examCodes)  !=0
于 2013-05-01T09:24:24.853 回答
1

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

于 2019-06-19T20:36:21.250 回答