SQL Server 2014下SSIS派生列提取最后反斜杠后文件名问题
解决SSIS派生列提取文件名的问题
嘿,这个坑我之前踩过!问题根源在于SSIS的FINDSTRING函数参数顺序和SQL Server的CHARINDEX完全反过来了,再加上转义字符的细节没注意,才导致了你遇到的语法错误。
正确的派生列表达式
调整参数顺序,同时处理反斜杠的转义,正确的表达式应该是:
RIGHT( [FileName], FINDSTRING(REVERSE([FileName]), "\\", 1) - 1 )
为什么之前的写法不对?
- 参数顺序搞反了:SQL的
CHARINDEX是CHARINDEX(要找的字符, 源字符串, 出现次数),但SSIS的FINDSTRING是FINDSTRING(源字符串, 要找的字符, 出现次数)。你之前把要搜索的\放在了第一个参数位置,完全不符合SSIS的语法要求。 - 反斜杠需要转义:在SSIS表达式里,反斜杠是转义字符,要表示一个实际的反斜杠必须写成
\\,直接写\会被识别为转义符的开始,触发语法错误。
额外优化:兼容无反斜杠的情况
如果你的字段里可能存在没有路径的纯文件名(比如直接是File21.csv),上面的表达式会因为FINDSTRING返回0,导致RIGHT函数报错。可以加个判断逻辑兼容这种场景:
LEN([FileName]) == 0 ? "" : (FINDSTRING([FileName], "\\", 1) == 0 ? [FileName] : RIGHT( [FileName], FINDSTRING(REVERSE([FileName]), "\\", 1) - 1 ))
这个表达式会先判断字段是否为空,再检查是否包含反斜杠,如果没有就直接返回原字段,避免报错。
内容的提问来源于stack exchange,提问作者Michael
相关产品推荐
相关产品推荐

