PostgreSQL中如何实现日期转整数取模得到1-5计算结果
问题说明
开发数据看板过程中,原有可在Vertica、MS SQL环境正常运行的日期分组计算逻辑,在PostgreSQL环境运行失效,原代码如下:
INT([Order Date]) % 5 + 1
该逻辑预期输出取值为1、2、3、4、5的循环分组结果。
失效原因
PostgreSQL不支持直接将日期/时间类型强制转换为整数类型,Vertica与MS SQL中INT(日期)的本质是将日期转换为连续的整数天序列值(通常为距固定基准日期的天数偏移),直接在PostgreSQL中运行该写法会触发类型不匹配错误。
PostgreSQL适配写法
核心逻辑保持和原逻辑一致:将订单日期转换为连续整数天值后对5取模,再加1将取模结果从0-4偏移为1-5,和原逻辑输出规则完全对齐,可根据字段类型选择对应写法:
- 如果
Order Date是date日期类型:
(Order Date - '1970-01-01'::date) % 5 + 1
- 如果
Order Date是带时分秒的timestamp/timestamptz时间戳类型,先截断到日期维度再计算,和原逻辑取整日期的行为一致:
(Order Date::date - '1970-01-01'::date) % 5 + 1
也可以使用儒略日转换实现相同效果,儒日本身就是连续计数的整数天序列,计算结果完全一致:
to_char(Order Date::date, 'J')::INT % 5 + 1
内容的提问来源于stack exchange,提问作者GeoBI Viz
相关产品推荐
相关产品推荐

