在“派生”列中导入字符串日期

时间:2011-11-18 17:18:56

标签: sql-server-2008 ssis

我有一个字符串日期从文件中读入,格式如下,并给我施法错误。

Oct 25 2011 10:18:10:756PM

我正在使用Derived Column将字符串转换为日期。

我在表达式中尝试了以下内容但没有成功

(DT_DBTIMESTAMP)myDate
CAST(myDate as datetime)
CONVERT(datetime, myDate)  //I get parse error on this.

必须有一种简单的方法来施放它。提前谢谢。

1 个答案:

答案 0 :(得分:3)

详细答案但我不同意“SSIS是否无法识别问题中提供的日期格式。”

也许如果它被重述为“SSIS无法在没有帮助的情况下识别所提供的日期格式”。在这种情况下的根本问题是,默认情况下,日期和数字解析例程是locale aware。一般来说,这是一件好事,除非它不是。当我以ccyymmdd从大型机上下来的格式处理日期时,我首先偶然发现了这个问题。正如其他人所指出的,它将在tsql中解析,为什么不解析SSIS?有很多文章主张切片和切割字符串数据,使其成为一个有效的日期时间,但为什么要经历所有麻烦?

将此作为样本输入数据(制表符分隔)。

LongDateDesiresFastParse    Gibberish
Oct 25 2011 10:18:10:756PM  Hello world
Oct 24 2010 10:18:10:756PM  Hello 2010 world
Oct 23 2009 10:18:10:756PM  Hello 2009 world
Oct 22 2008 10:18:10:756PM  Hello 2008 world

一个看起来像这样的包,

Control flow

通过更改Flat File Source上的一个设置,我可以使包失败。

Generic data flow

右键单击Flat File Source并选择“Show Advanced Editor”。在“输入和输出属性”选项卡上,展开“输出列”并查找包含日期的列。将FastParse设置从False更改为 True

Setting fast parse in a flat file source

当我运行它时,软件包最初失败了,因为它丢失了将该值存储到DB_TIMESTAMP的精度。当我将列设置为DB_TIMESTAMP2

时,我成功了

Connection Manager, advanced tab

https://sites.google.com/site/billfellows/home/files/FastParse.dtsx?attredirects=0&d=1

提供的演示包