情景介绍
逼近年底,大量数据拉取。
产品:我需要xxx数据,按照日期查每天的给我。
菜鸡楼主:好好好。
产品:我需要xxx数据,按照日期查每月分组给我。
菜鸡楼主:好好好。
产品:我需要xxx数据,按照日期查每季度的第三天的九点分组给我。
菜鸡楼主:???????????????????????
产品:不能查?
菜鸡楼主:。。。。。。。可以 ,但是----
产品:那就查,没有但是。
所以饱受折磨的楼主只能卑微的去找时间查询函数。
首先,我们使用的是pgsql数据库,时间字段为utc时间。
按照月份查,这个看起来很简单,毕竟,mysql查询已经很成熟了比如。
时间戳查询:date_format(FROM_UNIXTIME(表名.时间字段名,'%Y-%m-%d %T'),'%Y-%m-%d')
datetime时间类型查询:date_format(时间字段名, '%Y-%m-%d')
这个语句足已完成大多按天查,按照月份查等情况。
但是我们现在使用的是pgsql数据库。
按天查询
utc时间怎么按照天查呢,嗯,,,想一想.
好像可以转换时间数据格式试试。
timezone('Asia/Shanghai', 时间字段名) :: date
转化为日期格式不就能用来进行每日分组查询么,美滋滋
按月查询
然而现实很残酷,我们还得按照月来查询数据,咋整呢?
啊,真是令人头秃。
然后 在产品的催促下,我跪求技术总监求指教。
拿到了这样一个函数。
date_trunc(‘截至时间’,‘时间字段’)
SELECT date_trunc('month', timezone('Asia/Shanghai', paid_at)) AS dt,"count"(*) as s FROM "order" GROUP BY dt
果然,菜鸡不配抱怨产品需求难,只是自己菜而已。
按照季度查询
现在有了date_trunc这柄尚方宝剑,还怕你一个小小季度查询么。
select date_trunc('quarter',now()) + interval '3 d 9 h 1 minute 1 second'
date_trunc后面可以通过interval增加精确时间。
突然觉得这个函数很风骚呢。
以上