关于数据库时间查询

情景介绍

逼近年底,大量数据拉取。

产品:我需要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增加精确时间。

突然觉得这个函数很风骚呢。

以上

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
禁止转载,如需转载请通过简信或评论联系作者。

推荐阅读更多精彩内容