从文件名中提取日期

时间:2016-10-21 09:53:35

标签: sql sql-server ssis-2012

我有一个名为FileName的列,我希望从列中提取日期作为日期列。

文件名 M:\映射\ Workforce_Planning \ ABC \ ABClrmp.full.20160107.csv

期望的结果

日期 2016年1月7日

我想知道最有效的方式。

提前谢谢

2 个答案:

答案 0 :(得分:2)

如果这是您的格式,那么这可能是最好的方式:

select cast(left(right(filename, 12), 8) as date)

答案 1 :(得分:0)

尝试以下查询:即使文件名已更改..它将返回正确的输出。

            select cast(SUBSTRING(filename,(PATINDEX('%[0-9]%',filename)),8) as DATE) 

            select CONVERT(datetime, cast(SUBSTRING(filename,(PATINDEX('%[0-9]%',filename)),8) as DATE), 103)

示例代码:

            CREATE TABLE #tmpTable(id INT, FileName  nvarchar(250))
            INSERT INTO #tmpTable values
            (1, 'M:\Mapping\Workforce_Planning\ABC\ABClrmp.full.20160107.csv'),
            (2, 'M:\Mapping\.20160207.csv')

            select cast(SUBSTRING(filename,(PATINDEX('%[0-9]%',filename)),8) as DATE) from #tmpTable

            -- Or
            select CONVERT(datetime, cast(SUBSTRING(filename,(PATINDEX('%[0-9]%',filename)),8) as DATE), 103)
            from #tmpTable