2013-05-01 104 views
1

我在需要轉換爲SQL Server的舊報表中遇到過這一行。REGEXP_LIKE在SQL Server T-SQL中的轉換

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是一個字段,我不能指定一個模式?

我沒有寫這個報告,所以我不知道它在尋找什麼樣的模式。

非常感謝

回答

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

如果找到模式,PATINDEX返回非零值,你需要做的WHERE子句中的比較。 A WHERE子句必須後面跟着返回true/false的比較操作。

可能是您正在使用PATINDEX而未進行比較,這就是錯誤消息顯示WHERE子句附近的非布爾表達式的原因。

要搜索模式learner_code用通配符

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

PATINDEX一直處於比較字符串數據無價..非常感謝您的回答。非常有幫助。 – Zakerias 2013-12-12 14:16:27