我有一个 C# 中的 SQL Server CLR,其功能类似于 SQL Server CHARINDEX 函数,但允许使用正则表达式。
[SqlFunction]
public static SqlInt32 RegExIndex(SqlChars input, SqlString pattern, SqlInt32 beginning)
{
Regex regex = new Regex(pattern.Value, Options);
Match match = regex.Match(new string(input.Value), beginning.Value);
return match.Index;
}
在测试中,我发现以下应该返回 1 时返回 3:
select dbo.RegExIndex('test', 't', 1)
以下在应该返回 4 时返回 0:
select dbo.RegExIndex('test', 't', 4)
我想也许开始参数是零基数,但是当它应该返回 1 时也返回 0:
select dbo.RegExIndex('test', 't', 0)
关于我可能做错了什么的任何想法?
谢谢!
这是基于提供的答案的更新代码:
[SqlFunction]
public static SqlInt32 RegExIndex(SqlChars input, SqlString pattern, SqlInt32 beginning)
{
Regex regex = new Regex(pattern.Value, Options);
return beginning.Value > input.Value.Length ? 0
: !regex.Match(new string(input.Value), beginning.Value < 1 ? 0 : beginning.Value - 1).Success ? 0
: regex.Match(new string(input.Value), beginning.Value < 1 ? 0 : beginning.Value - 1).Index + 1;
}