我在一个需要转换为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是一个字段,我不能指定模式?
我没有写这份报告摆在首位,所以我很困惑,它的模式是什么寻找无论如何。
多谢
2条答案
按热度按时间4c8rllxm1#
如果找到模式,PATINDEX将返回非零值,您需要在WHERE子句中进行比较。
WHERE
子句后面必须跟有返回true / false的比较运算。可能您使用的是PATINDEX而没有进行比较,这就是错误消息在WHERE子句附近显示非布尔表达式的原因。
使用通配符搜索模式learner_code
wa7juj8i2#
ORACLE的REGEXP_LIKE支持实际的正则表达式,PATINDEX仅支持%和_通配符、[]列表/范围和^列表/范围的取反。