REGEXP_LIKE conversion in SQL Server T-SQL

Zakerias picture Zakerias · May 1, 2013 · Viewed 23.7k times · Source

I have come across this line in an old report that needs converting to SQL Server.

REGEXP_LIKE (examCodes, learner_code)

examCodes being the source and learner_code being the pattern. I know that SQL Server doesn't have REGEXP_LIKE and most places tell you to use PATINDEX.

Here's me thinking that this would work:

PATINDEX(learner_code, examCodes)

But I get the error:

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'.

On MSDN the syntax is specified as,

PATINDEX ('%pattern%',expression) 

But learner_code is a field and I can't specify a pattern?

I did not write this report in the first place so I'm puzzled to what the pattern it's looking for anyway.

Many thanks

Answer

Mudassir Hasan picture Mudassir Hasan · May 1, 2013
WHERE PATINDEX ('%pattern%',expression)  !=0

If pattern is found , PATINDEX returns non zero value and you need to do a comparison in WHERE clause. A WHERE clause must be followed by comparison operation that returns true / false.

May be you are using PATINDEX without doing the comparison and that is why error message shows non boolean expression near WHERE clause.

To search for pattern learner_code with wildcard character

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