using System.Text.RegularExpressions;
public static void Main()
var test1 = SqlLike("PRT23626%", "PRT2362666");
var test2 = SqlLike("PRT23626%", "PRT12362666");
var test3 = SqlLike("PRT23%626%", "PRT230006266600");
var test4 = SqlLike("PRT23%626%8", "PRT2300062660068");
var pattern = @"^P200[a-z0-9\-]+555[a-z0-9\-]+";
var test5 = RegexMatch(pattern, "P200565055501");
var test6 = RegexMatch(pattern, "1P200565055501");
Console.WriteLine(test1.ToString());
Console.WriteLine(test2.ToString());
Console.WriteLine(test3.ToString());
Console.WriteLine(test4.ToString());
Console.WriteLine(test5.ToString());
Console.WriteLine(test6.ToString());
public static bool RegexMatch(string pattern, string value)
Match match = Regex.Match(value, pattern);
public static bool SqlLike(string pattern, string value)
char currentPatternChar = '\0';
for (int i = 0; i < value.Length; i++)
char currentValueChar = value[i];
endOfPattern = (patternIndex >= pattern.Length);
currentPatternChar = pattern[patternIndex];
if (!isWildCard && currentPatternChar == '%')
lastWildCard = patternIndex;
while (patternIndex < pattern.Length && pattern[patternIndex] == '%')
currentPatternChar = patternIndex >= pattern.Length ? '\0' : pattern[patternIndex];
if (char.ToUpper(currentValueChar) == char.ToUpper(currentPatternChar))
if (char.ToUpper(currentValueChar) == char.ToUpper(currentPatternChar))
patternIndex = lastWildCard;
endOfPattern = (patternIndex >= pattern.Length);
if (isMatch && !endOfPattern)
bool isOnlyWildCards = true;
for (int i = patternIndex; i < pattern.Length; i++)
return isMatch && endOfPattern;