记一笔postgresql在时间计算上的方法。
- 计算时间差
date_part() 函数用于返回日期/时间的单独部分,比如年、月、日、小时、分钟等等。
select now()
---------------------
2018-02-01 15:49:15
select date_part('year',now())
---------------------
2018
select date_part('day',now())
---------------------
1
因此,可以通过date_part计算两个时间相差几天,几分钟,几秒钟等。
select date_part('day','2018-01-31 15:49:15'::timestamp-'2018-01-10 10:12:15'::timestamp)
---------------------
21
- 时间加减
时间加减两天(同理,可以加减几个月,几分等等)
select now()-interval '2 day'
---------------------
2018-01-30 16:04:05
select now()+interval '2 day'
---------------------
2018-02-03 16:04:05
- 计算本周第一天,本月第一天 :date_trunc
说明:DATE_TRUNC 函数根据您指定的日期部分(如小时、周或月)截断时间戳表达式或文本。DATE_TRUNC 返回指定的年的第一天、指定的月的第一天或指定的周的星期一。
select date_trunc('month',now())
---------------------
2018-02-01 00:00:00
select date_trunc('week',now())
---------------------
2018-01-29 00:00:00
在计算最近几个月,最近几天,最近几个星期的数据时用到
例如:求最近3个月创建的销售量
select sum(sales) sales from t_sale where create_time>date_trunc('week',now()-interval '2 mon')
时间单位:
year :年
week :该天在所在的年份里是第几周
timezone_minute:时区偏移量的分钟部分
timezone_hour:时区偏移量的小时部分
timezone:与UTC的时区偏移量,以秒记。正数对应 UTC 东边的时区,负数对应 UTC 西边的时区
second :秒
quarter:日期中年所在季度(1-4)
month:月(0-11)
minute:分钟(0-59)
milliseconds:
isodow:周中的第几天 [1-7] 星期一:1) 星期天:(7)
dow:周中天的索引(0-6 ;星期天是 0)
doy:一年的第几天(1-365/366)
hour:小时(0-23)
day: 天(1-31)