SQL Server T-SQL中的REGEXP_LIKE转换

ddrv8njm  于 2022-11-28  发布在  SQL Server
关注(0)|答案(2)|浏览(383)

我在一个需要转换为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是一个字段,我不能指定模式?
我没有写这份报告摆在首位,所以我很困惑,它的模式是什么寻找无论如何。
多谢

4c8rllxm

4c8rllxm1#

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

如果找到模式,PATINDEX将返回非零值,您需要在WHERE子句中进行比较。WHERE子句后面必须跟有返回true / false的比较运算。
可能您使用的是PATINDEX而没有进行比较,这就是错误消息在WHERE子句附近显示非布尔表达式的原因。
使用通配符搜索模式learner_code

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

wa7juj8i2#

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

相关问题