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

PostgreSQL中如何从时间戳提取yyyy-mm-dd格式纯日期

问题原因

DATE_TRUNC() 函数的返回值类型和输入的时间类型一致,你传入的是TIMESTAMP类型,所以哪怕截断到天粒度,返回的依然是时间戳类型,默认会显示00:00:00.0的时间部分,并不是纯日期值。

可用方案

根据你需要的返回类型,选对应写法即可:

  • 如果你需要返回DATE类型的纯日期值(最常用,后续可以直接做日期计算),直接做类型转换即可,写法最简洁:
SELECT '2019-12-12T16:10:02+11:00'::TIMESTAMPTZ::DATE;

执行返回结果就是2019-12-12,不带任何时间部分。

  • 如果你需要兼容标准SQL写法,不想用PostgreSQL特有的::转换符,可以用CAST语法,效果和上面完全一致:
SELECT CAST(CAST('2019-12-12T16:10:02+11:00' AS TIMESTAMPTZ) AS DATE);
  • 如果你不需要日期类型,只需要拿到2019-12-12格式的字符串结果,可以用格式化函数直接输出:
SELECT TO_CHAR('2019-12-12T16:10:02+11:00'::TIMESTAMPTZ, 'YYYY-MM-DD');
注意事项

你原来的写法里直接用TIMESTAMP '2019-12-12T16:10:02+11:00'会直接丢弃输入的+11:00时区信息,如果你的业务需要按时区计算对应日期,一定要用TIMESTAMPTZ(带时区时间戳)类型声明输入值,避免跨时区场景下日期计算偏差。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 03:24:28