【问题标题】:Converting string to datetimeoffset in SQL Server and Postgresql在 SQL Server 和 Postgresql 中将字符串转换为 datetimeoffset
【发布时间】:2017-06-23 07:14:49
【问题描述】:

在 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 数据库上。到目前为止,我所取得的最好成绩就是截断时区并将字符串的其余部分转换为时间戳。理想情况下,我不想使用这种有损转换。

【问题讨论】:

    标签: sql-server postgresql datetime datetimeoffset


    【解决方案1】:

    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

    【讨论】:

    • 这行得通!非常感谢!你知道postgresql是否有等效的东西?
    • @lacrima - 抱歉我不知道Postgresql
    • 谢谢 - 这是我能找到的类似问题的唯一有效答案。
    【解决方案2】:

    Postgres:

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

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

    【讨论】:

    • 我想保留时间戳中的所有信息。这只会保留年、月和日。实际上我想得到完全相同的格式,但类型是日期时间,而不是字符串
    • @lacrima,试试这个 to_timestamp('2017-06-22T00:43:15+0300', 'YYYY-MM-DD HH24:MI:SS') 这是 postgresql 函数
    • 这就是我到现在为止所做的,但我又丢失了时区信息
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多