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

关于SQL中MIN/MAX语句里::DATE双冒号用法的技术问询

关于PostgreSQL中::DATE类型转换的疑问解答
  • ::运算符的作用:
    在PostgreSQL里,双冒号::是类型转换运算符,用来将一个数据类型强制转换为另一种类型,是CAST()函数的简化写法。比如post_date::DATE就是把TIMESTAMP类型的字段转换为DATE类型,只保留年、月、日的日期信息。

  • ::DATE能否去除时间戳的小数部分:
    完全可以。因为DATE类型仅存储日期维度(年-月-日),不包含时分秒、毫秒/微秒等时间细节。当你把带小数的时间戳(比如2024-05-20 09:15:30.789)转换为DATE类型时,会自动截断所有时间部分(包括小数),最终得到2024-05-20。

  • 为什么直接用MAX(post_date)返回完整时间戳:
    因为post_date本身是TIMESTAMP类型,MAX()聚合函数会保留字段的原始数据类型,所以返回的是包含时分秒、小数的完整时间戳值。而MAX(post_date::DATE)是先将每条记录的post_date转换为DATE类型后再取最大值,结果自然是仅含日期的DATE类型值。

  • 等价写法对比:
    ::是PostgreSQL的特有简化语法,和标准SQL的CAST()函数效果一致,比如:

    -- 简化写法
    SELECT MAX(post_date::DATE) FROM user_posts;
    
    -- 标准SQL写法
    SELECT MAX(CAST(post_date AS DATE)) FROM user_posts;
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 01:54:52