【问题标题】:SSIS Unix timestamp to SQL Server datetime from csv file从 csv 文件到 SQL Server 日期时间的 SSIS Unix 时间戳
【发布时间】:2016-10-14 11:15:12
【问题描述】:

我已经尝试了几个选项来使其工作,但到目前为止使用派生列将 Unix 转换为日期时间都没有成功。

有问题的列作为 DT_WSTR 加载(我也尝试过 DT_I4 和 DT_I8),然后派生列应该使用日期时间创建新列。

这是我目前拥有的:

DATEADD("ss", (dt_i4)[logged_date], (dt_date)("1970-01-01"))

当我尝试执行时,我在派生列上得到一个错误,它只是指出

“评估函数时发生错误”

任何帮助将不胜感激。

【问题讨论】:

  • 忘了把方括号放在帖子上。编辑反映。记录的日期是 csv 平面文件中的一列。
  • 抱歉,logged_date 里面的类型是什么?与演员阵容一致吗?
  • logged_date 列具有 Unix 时间戳。我已经尝试将它从源转换为字符串和整数,但是在尝试使用 SSIS DATEADD 函数时派生列转换失败。
  • 尝试在平面文件源编辑器中修改 DataType 输出列(对应于 logged_date):属性 -> 显示高级编辑器 -> 输入和输出属性 -> 输出列。
  • 不幸的是,这是我每次更改列数据类型时都会做的事情,即使这样仍然对我不起作用。

标签: sql-server csv ssis unix-timestamp


【解决方案1】:

如果您的时间戳以秒为单位

Select dateadd(SS,1476444566,'1970-01-01') Returns 2016-10-14 11:29:26.000

如果微秒(需要更多的工作(

Declare @UnixTime bigint = 1470562081943371
Select DateAdd(MS,round(((@UnixTime/1000000.)-(@UnixTime/1000000))*1000,0),DateAdd(SECOND,(@UnixTime/1000000),'1970-01-01 00:00:00'))

【讨论】:

  • 我正在考虑通过 SQL Server 来完成,但需要我创建一个新表来接受 Unix 时间戳,然后再设置一个 SP 以转换为日期时间。理想情况下,我正在 SSIS 中寻找解决方案,因此我不必为此创建解决方法。
  • @ChristopherDonnelly SSIS 可以处理转换。仔细看看我第一行的语法
  • 我正在从 csv 平面文件源中引入数据,但我没有看到注入 SQL 来实现 SQL DATEADD 功能的方法。我尝试将您建议的第一行放入我的派生列函数中,但得到一个无效的令牌错误。有什么我想念的吗?
【解决方案2】:

发现我的问题。

原来有一行带有空值 unix 日期,这就是 SSIS 在转换时遇到问题的原因。

如果再次发生,我已经设置了一个错误输出以放入一个 excel 文件中。

代码现在按预期工作。

感谢所提供的帮助。

【讨论】:

    猜你喜欢
    • 2013-06-03
    • 2010-10-02
    • 1970-01-01
    • 1970-01-01
    • 2018-07-09
    • 1970-01-01
    • 2017-12-17
    • 2019-06-16
    相关资源
    最近更新 更多