上传datetimeoffset列,只有小时作为时区到SQL Server

时间:2018-01-22 05:34:24

标签: sql-server sql-server-2014 datetimeoffset

我的timestamp列的值在我的数据库中具有以下值:

2017-01-01 00:00:58.538-05
2017-01-01 00:16:58.54-05

数据类型为varchar,因为datetimedatetime2格式不起作用。我现在需要将此列转换为datetime格式。我刚刚发现了datetimeoffset。 :(

但是,转换仍然不能正常工作,我收到错误。 datetimeoffset希望至少看到-05:0 -05

DECLARE @datevar datetimeoffset = '2017-01-01 00:00:58.538-05';  
SELECT @datevar
  

Msg 241,Level 16,State 1,Line 3
  从字符串转换日期和/或时间时转换失败。

有什么可以解决这个问题?最糟糕的情况我倾向于使用python预处理每个文件以在每个值的末尾添加:0,然后保存文件,然后批量上传文件夹中的每个文件。但是,每个文件有大约3000万行,每年有365个。所以我真的不想这样做。

同样,数据已经上传,这将是一种简单而快速的方式。表中现在有大约80亿行,所以我不知道是否可以使用SQL Server Management Studio来完成。

1 个答案:

答案 0 :(得分:1)

你可以在sql本身附加:00

SELECT Cast(dates + ':00' AS DATETIMEOFFSET),
       dates
FROM   (VALUES ('2017-01-01 00:00:58.538-05'),
               ('2017-01-01 00:16:58.54-05')) tc (dates) 

考虑到你的日期都不是时区的一部分。如果某些日期有分钟部分,则需要以不同方式处理

在你的表格中,它应该是

SELECT Cast(datecolumn + ':00' AS DATETIMEOFFSET),
       datecolumn 
FROM   Yourtable

更新表格

update t set yourcol = Cast(yourcol + ':00' AS DATETIMEOFFSET)
FROM   Yourtable

然后将表数据类型更改为datetimeoffset,并确保上传带有偏移量的时间部分的数据