在SQL Server和Postgresql中将字符串转换为datetimeoffset

时间:2017-06-23 07:14:49

标签: sql-server postgresql datetime datetimeoffset

在SQL server中,我有一个列存储此格式的日期:

  

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

作为字符串。

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

到目前为止,我发现了从datetimeoffset转换为其他时间戳格式的多个函数,但这些函数都没有引用字符串。
https://docs.microsoft.com/en-us/sql/t-sql/data-types/datetimeoffset-transact-sql

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

2 个答案:

答案 0 :(得分:2)

Sql Server中的

Time Zone Offset表示如下

  

[+ | - ] 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

答案 1 :(得分:0)

Postgres:

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

您可以尝试使用该postgres功能。