[英]Substring depending on Delimiter in the string
我正在编写一个程序来处理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的方法。
编辑
文件名样本:
asdfkg_20140710_ets20140710_0525_theds
asdjjf_they_20140710_ets20140710_0525_theds
oiuth_theyb_wgb_20140710_ets20140710_0526_theds
我需要在20140710和20140710之前提取所有内容。
如果文件名的最后一部分是更可靠的(没有意外下划线),你可以REVERSE
并使用CHARINDEX
找到第四下划线(事后再次逆转子)。
否则,如果您可以信任日期格式,则可以将PATINDEX
与令人讨厌的表达式结合使用,例如
'%[_][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][_]%'
不是最漂亮的,但它将起作用。 大声笑
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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.