将文件名插入列

时间:2016-10-07 10:48:04

标签: sql ssis

我有一组动态变化的文件,我使用foreach循环容器来更新它们。我使用两个变量(1)表示文件路径,(2)表示源文件夹。我需要将文件名插入一个单独的列中。

文件名:

D:\SAFI\test1\XYZ0000_2016_04_Application_Report.csv`
D:\SAFI\test1\ABC0000.10_2016_04_Application_Report.csv`

我只需要将XYZ0000插入新列。如何借助变量做到这一点?我正在使用派生列,需要在新列中输出:

Filename
  XYZ0000
  ABC0000.10

2 个答案:

答案 0 :(得分:2)

尝试以下:

@FilePath:

D:\SAFI\test1\ABC0000.10_2016_04_Application_Report.csv

@FileName:

RIGHT( @[User::FilePath], FINDSTRING(REVERSE( @[User::FilePath]  ) , "\\", 1) - 1)

Result: ABC0000.10_2016_04_Application_Report.csv

@OnlyFile:

LEFT( @[User::FileName], FINDSTRING( @[User::FileName],"_",1 ) -1)

Result: ABC0000.10

将@FileName替换为@Onlyfile的表达式,使其成为单变量。

答案 1 :(得分:1)

如果我们认为文件的非感兴趣部分以第一次出现'_'开头,则可以使用以下表达式:

SUBSTRING(@[User::Variable1FilePath],15,FINDSTRING( @[User::Variable1FilePath],"_" ,1 )-15)

假设您有所有文件的'D:\ SAFI \ test1 \'公共文件夹(SUBSTRING函数中使用的长度为15)

或者您可以考虑表示路径末尾的第三个'\'出现 并尝试:

SUBSTRING(@[User::Variable1FilePath],FINDSTRING( @[User::Variable1FilePath],"\\" ,3 )+1,FINDSTRING( @[User::Variable1FilePath],"_" ,1 )-(FINDSTRING( @[User::Variable1FilePath],"\\" ,3 )+1))

我希望这对你有所帮助。