繁体   English   中英

使用分隔符在T-SQL中拆分列,同时跳过分隔符

[英]Using delimiters to split column in T-SQL while skipping delimiters

好的,问题标题含糊,但这就是问题所在。 我在名为Files的表的第一列中有一个文件名列表,我要从中分析这些文件,并用下划线分隔,但是有时我想跳过下划线。 每个文件名的格式为:

distance1000_7_13_2010_1_13PM_AveryDennisonAD_2300008_10S_Lock.csv

因此,为了获取日期和时间,我想将此列拆分为以下形式:

Col_A = distance1000
Col_B = 7_13_2010
Col_C = 1_13PM
Col_D = AveryDennisonAD
Col_E = 2300008
Col_F = 10S
Col_G = Lock.csv

如果我可以从Col_G截断.csv,那也很好,尽管这不是必需的。 这是到目前为止我没有正确解析日期和时间的Col_B和Col_C的代码:

DECLARE @RowCount INT, @I INT
SET @RowCount = (SELECT COUNT(FileName) FROM Files)
SET @I = 1

WHILE (@I <= @RowCount)
BEGIN
        DECLARE @FileName VARCHAR(1000)  
        SELECT @FileName = FileName FROM Files WHERE FileID = @I
        UPDATE Files 
        SET Col_A = dbo.fnSplit(@FileName, '_', 1),
            Col_B = dbo.fnSplit(@FileName, '_', 2), 
            Col_C = dbo.fnSplit(@FileName, '_', 3), 
            Col_D = dbo.fnSplit(@FileName, '_', 4),
            Col_E = dbo.fnSplit(@FileName, '_', 5)
            --etc.etc.
        WHERE FileID = @I
        SET @I = @I  + 1
END

如何修改SET语句,以便有时“跳过”定界符(并将其包括在新列数据中)并在其他时间使用下划线定界符拆分列?

我希望这很清楚。 提前致谢!

除非我缺少明显的内容,否则您是否可以将想要的元素连接到新字段中?

在下面的示例中,我还删除了循环,因为它似乎没有必要-但是,如果没有您的fnSplit过程的某些详细信息,我不能肯定地说:

UPDATE Files 
SET Col_A = dbo.fnSplit(FileName, '_', 1),
    Col_B = dbo.fnSplit(FileName, '_', 2) 
        + '_' + dbo.fnSplit(FileName, '_', 3)
        + '_' + dbo.fnSplit(FileName, '_', 4),
    Col_C = dbo.fnSplit(FileName, '_', 5), 
    Col_D = dbo.fnSplit(FileName, '_', 6),
    Col_E = dbo.fnSplit(FileName, '_', 7)
etc

(从可用性的角度来看,最好为列使用更有意义的名称)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM