Sql server 在SSIS作业中将数字(32,0)转换为日期时间

Sql server 在SSIS作业中将数字(32,0)转换为日期时间,sql-server,ssis,expression,etl,derived-column,Sql Server,Ssis,Expression,Etl,Derived Column,我的数据源给了我一个numeric(32,0)类型的列,它是历元值,我想把它转换成数据库中的DATETIME。我得到了一个派生列转换,对于表达式,我尝试这样做: DATEADD(“第二个”,强制转换([上次修改日期]为BIGINT)/1000,(DT_DBTIMESTAMP)“1970-01-01”) 但它给了我解析错误。有人能帮我正确的语法吗?如果我没有引用“SECOND”,它会立即告诉我SECOND不是输入列 即使输入是数字(32,0)类型,它们都是整数值,例如1564371486110。

我的数据源给了我一个
numeric(32,0)
类型的列,它是历元值,我想把它转换成数据库中的
DATETIME
。我得到了一个派生列转换,对于表达式,我尝试这样做:

DATEADD(“第二个”,强制转换([上次修改日期]为BIGINT)/1000,(DT_DBTIMESTAMP)“1970-01-01”)
但它给了我解析错误。有人能帮我正确的语法吗?如果我没有引用“SECOND”,它会立即告诉我SECOND不是输入列


即使输入是
数字(32,0)
类型,它们都是整数值,例如1564371486110。

我不能立即理解您的类型转换并除以1000

SSMS

表情

dateadd("SS", 1564069434, (DT_DBTIMESTAMP)"1970-01-01 00:00:00")
2019-07-25 15:51:17.763
 DATEADD("SS",(DT_UI8)SUBSTRING((DT_WSTR,32)epochtime,1,LEN(TRIM((DT_WSTR,32)epochtime)) - 3),(DT_DBTIMESTAMP)"1970-01-01 00:00:00")
编辑-我假设你在纪元时间上除以毫秒

派生列转换编辑器-表达式

dateadd("SS", 1564069434, (DT_DBTIMESTAMP)"1970-01-01 00:00:00")
2019-07-25 15:51:17.763
 DATEADD("SS",(DT_UI8)SUBSTRING((DT_WSTR,32)epochtime,1,LEN(TRIM((DT_WSTR,32)epochtime)) - 3),(DT_DBTIMESTAMP)"1970-01-01 00:00:00")

是的,我有毫秒:)当我硬编码一个可以工作的数字时,但我不能让它与我的输入列一起工作。语法分析器给我一个错误,说它可能包含无效的标记、不完整的标记或无效元素。@Gargoyle可以尝试将它作为字符串引入/转换为字符串,将毫秒数作为子字符串而不是除法,然后将其转换为bigint/类似于DT_UI8的值。我可以稍后亲自尝试,如果有效,可以更新。顺便说一句,您有什么样的示例值,可以添加到问题中吗?1564371486110就是一个示例。@Gargoyle Try-DATEADD(“SS”,(DT_UI8)子字符串((DT_WSTR,32)epochtime,1,LEN(TRIM((DT_WSTR,32)epocchcolumnthaisnumeric32))-3),(DT_DBTIMESTAMP)“1970-01-01 00:00”)