关于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
相关产品推荐
相关产品推荐

