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

发布于 2024-10-16 01:38:13 字数 700 浏览 2 评论 0原文

在 SQL Server 2008 中,我从下面的代码项目站点构建了一个正则表达式匹配和替换函数,并且运行良好。 http://www.codeproject.com/KB/string/SqlRegEx .aspx?msg=3683405#xx3683405xx。 该函数基本上查找列文本,找到匹配项并替换为替换的文本。我在这里使用了反向引用。

例如,如果Column1有“第一篇文章#345被9999引用并放置在001”,它将返回 345#9999#001

select 语句 选择column1, dbo.ufn_RegExReplace(Column1, '(?\d+).?(?\d+).?(?\d+).*?(?\d+)', '${First_number_match }#${Second_number_match}#Third_number_match',1) 工作正常。

我想要的是将 345#9999#001 插入表的三列中。

请注意,在我的实际问题中,我必须使用正则表达式。我进行了简化,以便专家能够重点关注这个问题。

正如我们所知,正则表达式非常令人伤脑筋,并且与 SQL 一起使用会增加它的强度。因此,我将不胜感激对此的任何帮助。 感谢您花时间阅读本文。

In SQL Server 2008, I have built a regex match and replace function from below code project site and is working well.
http://www.codeproject.com/KB/string/SqlRegEx.aspx?msg=3683405#xx3683405xx.
This functions basically looks up column text, finds match and replaces with the replaced text. I have used back reference here.

e.g. if Column1 had 'the first article #345 is refered by 9999 and place in 001', it will return
345#9999#001

The select statement
Select column1, dbo.ufn_RegExReplace(Column1, '(?\d+).?(?\d+).?(?\d+).*?(?\d+)', '${First_number_match}#${Second_number_match}#Third_number_match',1) is working fine.

What I want is to insert 345#9999#001 into three columns of a table.

Please note, in the my actual problem, I will have to use Regular Expression. I simplified for experts to focus on the issue.

As we know Regex are nerve-racking and using with SQL adds to it. So I will appreciate any help on this.
Thanks for your time to read this.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

你的心境我的脸 2024-10-23 01:38:13

您可以创建一个字符串分割函数并使用它来获取您的个人值。例如,如下所示:

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 个输出参数。

You could create a string split function and use that to get your individual values. For example, something like this:

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 

Alternatively, you could modify the above Split function to return your 3 values in a single table row if desired, or as 3 output parameters on a stored procedure.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文