SQL's "like" patterns to compare in .Net

I wanted to use   SQL's "like" patterns to compare in .Net.

I found the good C# implementation of  function in thread Using Regex to create a SQL's "like" like function.

The function  IsSqlLikeMatch works fine, but I've noticed that the search is case-sensitive.

It's also doesn't match % if there are multiple lines.

But it was easy to change by modifying IsMatch call to

return Regex.IsMatch(input, pattern, RegexOptions.IgnoreCase | RegexOptions.Singleline);

Note that it could be very serious performance hit, if the pattern is started with %.

E.g for patternsPattern='%Part1%Part2%' and long message (Length 30720) time spent 40 sec!

but for pattern 'Begin%Part1%Part2%' and the same long message  time spent is almost 0 .The test code with time measured:

  DateTime start = DateTime.Now;

DebugOutputHelper.TracedLine("IsSqlLikeMatch sPattern=" + sPattern + " errorMsg.Length " + errorMsg.Length + " Started " + start.ToString());

bRet = errorMsg.IsSqlLikeMatch(pattern);

TimeSpan timeDifference = DateTime.Now - start;

DebugOutputHelper.TracedLine("IsSqlLikeMatch sPattern="+ sPattern +" errorMsg.Length "+ errorMsg.Length +

" time spent " + timeDifference.ToString());

This article is part of the GWB Archives. Original Author: Michael Freidgeim

New on Geeks with Blogs