我有以下C#
功能:
[SqlFunction(FillRowMethodName = "FillRowForSplit")]
public static IEnumerable Split(SqlString sqlInput, SqlString sqlPattern)
{
string[] substrings;
if (sqlInput.IsNull || sqlPattern.IsNull)
{
substrings = new string[0];
}
else
{
substrings = Regex.Split(sqlInput.Value, sqlPattern.Value);
}
return substrings;
}
public static void FillRowForSplit(Object value, out SqlString sqlValue)
{
sqlValue = new SqlString(value.ToString());
}
通常通过正则表达式拆分值。以下是T-SQL
定义:
CREATE FUNCTION [RegexSplit](@input NVARCHAR(MAX), @pattern NVARCHAR(MAX))
RETURNS TABLE ([value] NVARCHAR(MAX))
AS
EXTERNAL NAME [Utils].[RegularExpression].[Split];
GO
这是一个有效的例子:
SELECT [value]
FROM [RegexSplit]('10527,!!10528,!!10529,!!10530,!!10526', ',!!');
问题是“我能确定保留单独元素的顺序吗?”或者我应该重写C#
函数,以便将每个元素与索引匹配并返回索引。
答案 0 :(得分:0)
保留单独元素的顺序,因为即使为Regex
指定了RightToLeft
选项,Regex
也会依次处理字符。