Regex 从正则表达式返回的文本插入SQL server

Regex 从正则表达式返回的文本插入SQL server,regex,tsql,insert,backreference,Regex,Tsql,Insert,Backreference,在SQLServer2008中,我从下面的代码项目站点构建了一个正则表达式匹配和替换函数,并且运行良好。 . 此函数基本上查找列文本,查找匹配项并替换为替换的文本。我在这里使用了back reference e、 g.如果第1栏有“9999引用了第345条,并将其放在001中”,则它将返回 345999901 select语句 选择column1,dbo.ufn_RegExReplaceColumn1,“?\d+.\d+.\d+.*\d+”,“${First\u number\u match}$

在SQLServer2008中,我从下面的代码项目站点构建了一个正则表达式匹配和替换函数,并且运行良好。 . 此函数基本上查找列文本,查找匹配项并替换为替换的文本。我在这里使用了back reference

e、 g.如果第1栏有“9999引用了第345条,并将其放在001中”,则它将返回 345999901

select语句 选择column1,dbo.ufn_RegExReplaceColumn1,“?\d+.\d+.\d+.*\d+”,“${First\u number\u match}${Second\u number\u match}Third\u number\u match”,1工作正常

我想要的是将3459999001插入表的三列中

请注意,在我的实际问题中,我将不得不使用正则表达式。我希望专家们能够关注这个问题

正如我们所知,正则表达式是神经折磨和使用SQL添加到它。因此,我将非常感谢在这方面的任何帮助。
感谢您花时间阅读此内容。

您可以创建一个字符串拆分函数,并使用它来获取您的单个值。例如,类似这样的内容:

CREATE FUNCTION dbo.fn_StringSplit(@String NVARCHAR(8000), @Delimiter NCHAR(1))       
RETURNS @tblItems TABLE (item NVARCHAR(8000))       
AS       
BEGIN       
    DECLARE @idx INT       
    DECLARE @slice NVARCHAR(8000)       

    SELECT @idx = 1       
        IF LEN(@String) < 1 OR @String IS NULL  RETURN       

    WHILE (@idx != 0 AND LEN(@string) > 0)
    BEGIN
        SET @idx = CHARINDEX(@Delimiter, @String)       
        IF @idx != 0       
            SET @slice = LEFT(@String, @idx - 1)       
        ELSE       
            SET @slice = @String       

        IF(LEN(@slice) > 0)  
            INSERT INTO @tblItems(item) VALUES (@slice)       

        -- Trim saved item from remaining string 
        SET @String = RIGHT(@String, LEN(@String) - @idx)             
    END
RETURN       
END 

或者,如果需要,可以修改上面的Split函数以在单个表行中返回3个值,或者作为存储过程中的3个输出参数

您可以创建一个字符串拆分函数,并使用它来获取您的单个值。例如,类似这样的内容:

CREATE FUNCTION dbo.fn_StringSplit(@String NVARCHAR(8000), @Delimiter NCHAR(1))       
RETURNS @tblItems TABLE (item NVARCHAR(8000))       
AS       
BEGIN       
    DECLARE @idx INT       
    DECLARE @slice NVARCHAR(8000)       

    SELECT @idx = 1       
        IF LEN(@String) < 1 OR @String IS NULL  RETURN       

    WHILE (@idx != 0 AND LEN(@string) > 0)
    BEGIN
        SET @idx = CHARINDEX(@Delimiter, @String)       
        IF @idx != 0       
            SET @slice = LEFT(@String, @idx - 1)       
        ELSE       
            SET @slice = @String       

        IF(LEN(@slice) > 0)  
            INSERT INTO @tblItems(item) VALUES (@slice)       

        -- Trim saved item from remaining string 
        SET @String = RIGHT(@String, LEN(@String) - @idx)             
    END
RETURN       
END 

或者,如果需要,可以修改上面的Split函数以在单个表行中返回3个值,或者作为存储过程中的3个输出参数

我不确定我是否理解你的问题。是否要将3459999001拆分为三个部分,并将每个部分插入到不同的列中?或者您希望在三列中的每一列中都包含完整的字符串?根据我对链接中描述的函数的理解,您应该使用函数ufn_RegExSplit而不是ufn_regexreplace patrick Echterbruch:是的,您的假设是正确的。谢谢我不知道我是否理解你的问题。是否要将3459999001拆分为三个部分,并将每个部分插入到不同的列中?或者您希望在三列中的每一列中都包含完整的字符串?根据我对链接中描述的函数的理解,您应该使用函数ufn_RegExSplit而不是ufn_regexreplace patrick Echterbruch:是的,您的假设是正确的。感谢Hanks nybbler,对于我描述的示例,这可以起作用。但在实际场景中,文本必须使用正则表达式进行提取。不过我简化了这个例子。谢谢nybbler,这对我所描述的例子是有效的。但在实际场景中,文本必须使用正则表达式进行提取。不过我简化了这个例子。