You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将ISO 8601格式字符串转为日期?PostgreSQL转换语句失效求助

将ISO 8601字符串转换为PostgreSQL日期类型

以下是几种可行的转换方法,可解决你原语句可能因时区设置导致结果不符合预期的问题:

  • 方法1:使用TO_TIMESTAMP指定格式后转日期
    通过明确格式字符串解析ISO 8601时间,再转换为日期类型:

    SELECT DATE(TO_TIMESTAMP('2023-06-14T17:48:52.012Z', 'YYYY-MM-DD"T"HH24:MI:SS.US"Z"'));
    
  • 方法2:修正原语句,明确UTC时区转换
    原方法无效大概率是数据库时区与UTC不一致导致日期偏移,通过AT TIME ZONE指定UTC时区后再转日期:

    SELECT ('2023-06-14T17:48:52.012Z'::timestamptz AT TIME ZONE 'UTC')::date;
    
  • 方法3:直接用TO_DATE提取日期部分
    如果仅需要提取字符串中的日期部分,忽略时间和时区信息,可直接使用:

    SELECT TO_DATE('2023-06-14T17:48:52.012Z', 'YYYY-MM-DD"T"HH24:MI:SS.US"Z"');
    

补充说明:原语句SELECT '2023-06-14T17:48:52.012Z'::timestampz::date的问题在于,当数据库时区不是UTC时,带时区的时间戳会转换为本地时区的时间,再取日期就会出现偏移。比如数据库时区为东八区时,原时间戳会转为2023-06-15 01:48:52+08,转日期后得到2023-06-15,而非预期的2023-06-14。

内容的提问来源于stack exchange,提问作者Zubair Amjad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 00:04:54