在 SQL 服务器和 Postgresql 中将字符串转换为 datetimeoffset

Converting string to datetimeoffset in SQL Server and Postgresql

在 SQL 服务器中,我有一列存储以下格式的日期:

2017-06-22T00:43:15+0300

作为字符串。

我想做的是将这些字符串转换为实际的 datatimeoffset 数据,以便将它们作为日期处理。

到目前为止,我已经找到了多个将 datetimeoffset 转换为其他时间戳格式的函数,但 none 其中涉及字符串。
https://docs.microsoft.com/en-us/sql/t-sql/data-types/datetimeoffset-transact-sql

完全相同的问题出现在 postgresql 数据库上。到目前为止,我所取得的最好成绩只是截断时区并将字符串的其余部分转换为时间戳。理想情况下,我不想使用这种有损转换。

Postgres :

to_timestamp('2017-06-22T00:43:15+0300', 'YYYY-MM-DD HH24:MI:SS')

您可以尝试使用那个 postgres 函数。

Time Zone Offset in Sql 服务器是这样表示的

[+|-] hh:mm:

在您的数据中,offset 部分缺少分号

DECLARE @stringtime VARCHAR(100)= '2017-06-22T00:43:15+0300'

SET @stringtime = Reverse(Stuff(Reverse(@stringtime), 3, 0, ':'))

SELECT Cast(@stringtime AS DATETIMEOFFSET(4)) 

结果: 2017-06-22 00:43:15.0000 +03:00