通过查看'/'短划线字符,从sql中的字符串中删除文件名

时间:2016-10-12 08:43:56

标签: sql sql-server-2012 ssis-2012

我想知道如何从下面的

中获取文件名
C:\Users\avs\Desktop\Testing\Text Files\TargetFolder\PN005337.RCS

PN005337.RCS文件名的名称和长度可能不同。然而,获取它的唯一明确方法是查看最后一个'\'然后在最后一个'\'之后带回任何东西。

无论如何要在sql中做到这一点。这是sql server中的一列,但报表所有者只想查看名称。

我在SSIS中这样做,所以任何一个解决方案在表达式或SQL中都会很棒。

谢谢

2 个答案:

答案 0 :(得分:1)

您可以通过路径的第一个if($counter == 50) { myEvent(); /* Whatever code "puts the event aside" */ $counter = 0; } else { myEvent(); $counter++; } 确定最后一个斜杠的索引,然后通过REVERSE找到斜杠。
最后,使用找到的索引提取应用于函数CHARINDEX的原始路径的文件名。

表达式为RIGHT

答案 1 :(得分:0)

CROSS APPLY进行中间计算的案例

declare @t table (full_path varchar(max));
insert @t values 
 ('C:\Users\avs\Desktop\Testing\Text Files\TargetFolder\PN005337.RCS'), 
 ('C:PN005337.RCS'), 
 ('PN005337.RCS');


SELECT full_path, 
    CASE WHEN pback>=0 THEN RIGHT(full_path, pback) 
         WHEN pcol>=0 THEN RIGHT(full_path, pcol) 
         ELSE full_path
         END as fname
FROM  @t
CROSS APPLY (
    SELECT pback= CHARINDEX('\', REVERSE(full_path)) -1, pCol = CHARINDEX(':', REVERSE(full_path)) -1
    ) pp