我正在编写一个过程来处理SSIS中的文件名。
概述:
我在SSIS中的文本文件加载过程中捕获文件名。我编写了一个过程,以便将此文件名拆分为不同的组件,并以变量的形式返回值,我将在SSIS包中进一步使用。
Problem
This file name is of the format @FileName ="FILE_DATE_REF_DATETIME".All I need
to split this in a way like "FILE" , "DATE". I am able to achieve this by using
SUBSTRING(@Filename,0,CHARINDEX('_',@FileName))
and
Substring(@FileName,CHARINDEX('_',@FileName)+1,CHARINDEX('_',SUBSTRING(@Filename,CHARINDEX('_',@Filename)+1,Len(@Filename)))-1)
但是这里的主要问题是当我们在FILE中获得额外的'_'时它完全出错了。任何人都可以建议我将上述文件名格式拆分为FILE和DATE的方法。
修改
FileNames的样本:
asdfkg_20140710_ets20140710_0525_theds
asdjjf_they_20140710_ets20140710_0525_theds
oiuth_theyb_wgb_20140710_ets20140710_0526_theds
我需要在20140710和20140710之前提取任何内容。
答案 0 :(得分:1)
答案 1 :(得分:0)
如果文件名的最后一部分更可靠(没有意外的下划线),你可以REVERSE
它并使用CHARINDEX
找到第四个下划线(并在之后再次反转子串)。
否则,如果你可以信任日期格式,你可以使用PATINDEX
表达可怕的表达式,如
'%[_][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][_]%'
答案 2 :(得分:0)
不是最漂亮的但它会起作用。 LOL
DECLARE @FILE VARCHAR(55) = 'FILE_DATE_REF_DATETIME'
DECLARE @FILEFUN AS VARCHAR(55) = LEFT(@FILE,CHARINDEX('_',@FILE))
DECLARE @FILENAMEOUTPUT AS TABLE(Name Varchar(55))
WHILE LEN(@FILE) > 0
BEGIN
INSERT INTO @FILENAMEOUTPUT
SELECT REPLACE(@FILEFUN,'_','')
SET @FILE = REPLACE(@FILE,@FILEFUN,'')
SET @FILEFUN = iif(CHARINDEX('_',@FILE)=0,@FILE,LEFT(@FILE,CHARINDEX('_',@FILE)))
END
SELECT * FROM @FILENAMEOUTPUT