SQL Server T-SQL中的类REGEXP_转换

SQL Server T-SQL中的类REGEXP_转换,sql,sql-server,oracle,design-patterns,patindex,Sql,Sql Server,Oracle,Design Patterns,Patindex,我在一份需要转换为SQL Server的旧报告中遇到了这一行 REGEXP_LIKE (examCodes, learner_code) examCodes是源代码,learner_代码是模式。我知道SQL Server没有类似于REGEXP_的功能,大多数地方都告诉您使用PATINDEX 我认为这会奏效: PATINDEX(learner_code, examCodes) 但我得到了一个错误: Msg 4145, Level 15, State 1, Line 54 An expressi

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

REGEXP_LIKE (examCodes, learner_code)
examCodes是源代码,learner_代码是模式。我知道SQL Server没有类似于REGEXP_的功能,大多数地方都告诉您使用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) 
但是学习者代码是一个字段,我不能指定模式

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

非常感谢

WHERE PATINDEX ('%pattern%',expression)  !=0
若找到模式,则PATINDEX返回非零值,并且需要在WHERE子句中进行比较。
WHERE
子句后面必须跟有返回true/false的比较操作。

可能您使用的是PATINDEX而没有进行比较,这就是为什么错误消息在WHERE子句附近显示非布尔表达式

使用通配符搜索模式学习者代码

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

ORACLE的类REGEXP_支持实际正则表达式,PATINDEX只支持%和u通配符、[]列表/范围和^list/范围否定