SQL Server CHARINDEX関数のように機能するC#のSQL Server CLRがありますが、正規表現を使用できます。
[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;
}