【问题标题】:Regex in SQL Server separated by spacesSQL Server 中的正则表达式用空格分隔
【发布时间】:2012-03-30 00:36:32
【问题描述】:

我一直很好奇,这在SQL中是否可能

这是我的桌子

Text
-----
India 01/01/2001 Mumbai
SriLanka 01/01/2001 Colombo
USA 01/01/2001 Chicago

从这些创建表格单独的列(由空格分隔),如

Country     Date        Location  
-----       -----       -------- 
India       01/01/2001   Mumbai
SriLanka    01/01/2001   Colombo
USA         01/01/2001   Chicago

唯一让我感到兴奋的是我们在 JAVA 中执行的正则表达式。

在 SQL 中也是可能的。

谢谢!!!

【问题讨论】:

    标签: sql-server sql-server-2008 sql-server-2005 tsql sql-server-2008-r2


    【解决方案1】:

    您可以使用如下表值函数拆分列:

    CREATE FUNCTION [dbo].[fnParseFields] ( @str NVARCHAR(max), @delimiter NCHAR )
    RETURNS @retval TABLE(Country NVARCHAR(max), [Date] NVARCHAR(max), Location NVARCHAR(max))
    AS
    BEGIN
        declare @f1 varchar(max), @f2 varchar(max), @f3 varchar(max);
        set @str=ltrim(@str);
    
        -- Field 1
        set @f1=(left(@str,CHARINDEX(@delimiter,@str,1)-1));
        SET @str=RIGHT(@str,LEN(@str)-CHARINDEX(@delimiter,@str,1));
    
        -- Field 2
        set @f2=(left(@str,CHARINDEX(@delimiter,@str,1)-1));
    
        -- Field 3
        SET @f3=RIGHT(@str,LEN(@str)-CHARINDEX(@delimiter,@str,1));
        insert into @retval values (@f1,@f2,@f3);
    
        RETURN;
    END
    
    GO
    
    create table myText (sometext varchar(80));
    
    insert into myText values
    ('India 01/01/2001 Mumbai')
    , ('SriLanka 01/01/2001 Colombo')
    , ('USA 01/01/2001 Chicago');
    go
    
    select f.* from myText
    cross apply [dbo].[fnParseFields](sometext,' ') f
    go
    

    结果:

    【讨论】:

      【解决方案2】:

      还没有真正尝试过,但是可以使用 T-SQL 导入逗号分隔值文件

      BULK
      INSERT tableName
      FROM 'c:\csvtest.txt'
      WITH
      (
      FIELDTERMINATOR = ' ',
      ROWTERMINATOR = '\n'
      )
      

      Here 是样本的来源。

      更新 如果数据存储在数据库中,似乎没有比编写函数/存储过程来解析 CSV 更简单的解决方案了,就像this SO answer 建议的那样。

      【讨论】:

      • 嗯,我的源和目标都是数据库中的表。抱歉忘了提!!!
      • 更新了我的答案。希望对您有所帮助。
      • 想知道你是否可以帮忙stackoverflow.com/questions/9687622/…
      猜你喜欢
      • 2015-09-10
      • 2021-12-27
      • 1970-01-01
      • 1970-01-01
      • 2018-11-19
      • 1970-01-01
      • 2016-09-15
      • 1970-01-01
      • 2012-11-06
      相关资源
      最近更新 更多