【问题标题】:Import String Date in Derived column在派生列中导入字符串日期
【发布时间】:2011-11-18 17:18:56
【问题描述】:

我从以下格式的文件中读取了一个字符串日期,并且出现了转换错误。

Oct 25 2011 10:18:10:756PM

我正在使用派生列将字符串转换为日期。

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

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

必须有一种简单的方法来投射它。提前致谢。

【问题讨论】:

  • 这可能是本地化问题?因为这对我来说适用于 SSMS:select convert(datetime, 'Oct 25 2011 10:18:10:756PM')
  • Derek,你能解释一下你所说的本地化是什么意思吗?我也可以执行 sql 语句,但由于某种原因它不喜欢派生列的表达式。谢谢。

标签: sql-server-2008 ssis


【解决方案1】:

详细的答案,但对于“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

还有一个看起来像这样的包,

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

右键单击平面文件源并选择“显示高级编辑器”。在“输入和输出属性”选项卡上,展开输出列并找到包含日期的列。将 FastParse 设置从 False 更改为 True

当我运行它时,包最初失败了,因为它正在失去将值存储到DB_TIMESTAMP 中的精度。当我将列设置为输入DB_TIMESTAMP2时我成功了

可在https://sites.google.com/site/billfellows/home/files/FastParse.dtsx?attredirects=0&d=1获取演示包

【讨论】:

    猜你喜欢
    • 2021-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多