我在一个需要转换为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是一个字段,我不能指定模式?
我一开始并没有写这份报告,所以我对它所寻找的模式感到困惑。
非常感谢
WHERE PATINDEX ('%pattern%',expression) !=0
若找到了模式,PATINDEX将返回非零值,并且需要在WHERE子句中进行比较。WHERE
子句后面必须跟有返回true/false的比较运算
可能是您在使用PATINDEX时没有进行比较,这就是错误消息在WHERE子句附近显示非布尔表达式的原因。
使用通配符搜索模式learner_code
WHERE PATINDEX ('%' + CAST(learner_code AS VARCHAR) +'%',examCodes) !=0
ORACLE的REGEXP_LIKE支持实际的正则表达式,PATINDEX只支持%和_通配符、[]列表/范围和^列表/范围否定。