我的timestamp
列的值在我的数据库中具有以下值:
2017-01-01 00:00:58.538-05
2017-01-01 00:16:58.54-05
数据类型为varchar
,因为datetime
,datetime2
格式不起作用。我现在需要将此列转换为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来完成。
答案 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
,并确保上传带有偏移量的时间部分的数据