【问题标题】:Retrieve text after last back slash using SSIS Derived Column transformation使用 SSIS 派生列转换在最后一个反斜杠后检索文本
【发布时间】:2020-06-03 19:20:08
【问题描述】:

使用 SQL Server 2014。

我有一个字段,其中包含一个包含完整文件路径的字符串,即

\\Server\Folder1\Folder2\Folder3\File21.csv

我只想要最后一个反斜杠之后的内容,即

File21.csv

所以在 SQL 世界中我会使用:

Select RIGHT([FileName],charindex('\',reverse([FileName]),1)-1) as FileNameNew from mytable

但是,如何在 SSIS 的派生列中执行此操作?没有 CHARINDEX,所以你必须使用 FINDSTRING。这是我的表达:

RIGHT( [FileName] , FINDSTRING('\', REVERSE( [FileName] ) ,1)  -1)

但它不起作用,它一直说单引号不是预期的。我也试过双引号无济于事。

【问题讨论】:

  • 我没有方便的 SSDT 安装来测试这个,但是 SSIS 表达式中的反斜杠通常需要用反斜杠进行转义,当然,反斜杠。所以您可能使用FINDSTRING('\\'... 到达某个地方。无论如何,值得一试。
  • @EricBrandt 它接受了这一点,但随后包失败:[Derived Column [2]] 错误:SSIS 错误代码 DTS_E_INDUCEDTRANSFORMFAILUREONERROR。 “派生列”失败,因为发生错误代码 0xC0049067
  • 新错误是进步!不过,我出去了,缺少一个可以玩的编辑器。
  • 哈哈——我想我会在导入任务之后恢复到 SQL 更新。只是试图将其全部包含在 DFT 中
  • @EricBrandt 最简单的解决方案是使用TOKEN()TOKENCOUNT()。因为它们是为解决类似情况而开发的。

标签: sql-server ssis sql-server-2014 etl derived-column


【解决方案1】:

我认为你的参数倒过来了。 FINDSTRING() 首先想要你正在搜索的东西,然后是你正在搜索的东西。您将需要双引号和转义的反斜杠。这应该有效:

RIGHT( [FileName] , FINDSTRING(REVERSE( [FileName] ), "\\" ,1)  -1)

【讨论】:

    【解决方案2】:

    即使这可以使用RIGHT()SUBSTRING() 函数来完成。我更喜欢使用 TOKENTOKENCOUNT() 函数来做到这一点:

    TOKEN([File Name],"\\",TOKENCOUNT([File Name],"\\"))
    

    例子:

    TOKEN("\\\\Server\\Folder1\\Folder2\\Folder3\\File21.csv","\\",TOKENCOUNT("\\\\Server\\Folder1\\Folder2\\Folder3\\File21.csv","\\"))
    

    结果:

    文件21.csv

    【讨论】:

      猜你喜欢
      • 2017-10-10
      • 1970-01-01
      • 1970-01-01
      • 2022-06-23
      • 2022-01-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多