好的问题标题含糊不清,但这就是问题所在。我在一个名为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
如果我可以将.csv从Col_G中删除,那也很好,尽管没有必要。这是我到目前为止的代码,其中没有正确解析日期和时间的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语句以便有时“跳过”分隔符(并将其包含在新的列数据中)并使用下划线分隔符在其他时间分割列?
我希望这很清楚。提前谢谢!
答案 0 :(得分:1)
除非我遗漏了一些明显的东西,否则你不能将所需的元素连接到新的字段中吗?
在下面的示例中,我也删除了循环,因为它似乎没有必要 - 但是,如果没有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
(从可用性的角度来看,为你的列使用更有意义的名称可能更好)