在t-Sql中将nvarchar(纪元时间)转换为datetime

时间:2015-05-05 16:26:20

标签: sql-server tsql

我正在尝试将Nvarchar(510)列转换为人类可读日期时间。 EPOCHDATE列是一个bigint值。

当我运行时:

select  
    dateadd(ms, 1427213353825%(3600*24*1000), 
        dateadd(day, 1427213353825/(3600*24*1000), '1970-01-01 00:00:00.0'))

我以人类可读的形式取回日期。 1427213353825是第一行的EPOCHDATE值。

但是当我使用我得到的列

运行它时
  

nvarchar值的转换' 1427213353825'溢出了一个int列。

我该如何解决这个问题?我没有创建表格,所以我不认为我可以更改该列。

1 个答案:

答案 0 :(得分:0)

将epoch列转换为bigint可以解决该错误。

DECLARE @blah TABLE (epoch NVARCHAR(512));
INSERT INTO @blah VALUES ('1427213353825');

SELECT
  DATEADD(ms, CAST(epoch AS BIGINT) %(3600*24*1000), 
    DATEADD(DAY, CAST(epoch AS BIGINT)/(3600*24*1000), '1970-01-01 00:00:00.0'))
FROM @blah