PostgreSQL - 日期函数汇总
目录
比较两个日期之间的时间差超过N个小时
在PostgreSQL中,两个时间戳相减会得到一个interval
类型的结果,如下:
|
|
通过对比两个interval
类型即可得到我们想要的结果,PostgreSQL会自行对interval
类型进行处理,如下:
|
|
比较日期时隐藏的坑
PostgreSQl在比较两个timestamp时,隐藏了一个坑:在用DBeaver查看数据时,这个timestamp的值是看不到毫秒值的,在比较的时候可能不小心就被毫秒值坑了,如下:
|
|
上述的条件是可能查出来更新日期为2019-05-13 15:49:26
的数据的,原因是上诉条件等价于updated_on > '2019-05-13 15:49:26 000'
,有部分数据的毫秒值虽然看不到,但却大于条件中的毫秒值,因此会造成查询出问题的错觉。
在查询日期时,应该尽量根据实际情况将秒值增大一秒或变小一秒。
EXTRACT函数对日期进行处理
语法如下:
|
|
data
是日期,也可以是时间间距类型interval
。这里的type
需要指定为以下的值之一:
type | value |
---|---|
day | 返回日期值 |
month | 返回月份值 |
year | 返回年份值 |
doy(day of year) | 返回年中的第几天 |
dow(day of week) | 返回星期几 |
quarter | 返回季度 |
epoch | 将当前日期转化为秒值 |
|
|
如果需要把时间转化成毫秒值,直接把结果乘以1000就行。
去掉日期的毫秒值
向下取整函数floor()
|
|
向上取整函数ceil()
或ceiling()
,这两个一样的
|
|
四舍五入函数round()
|
|
补充:epoch新纪元时间
新纪元时间 Epoch 是以1970-01-01 00:00:00 UTC
为标准的时间,将目标时间与1970-01-01 00:00:00
时间的差值以秒来计算 ,单位是秒,可以是负值; 有些应用会将时间存储成epoch 时间形式,以提高读取效率。
参考链接
- postgresql获取系统当前时间毫秒数的sql,以及秒级时间戳
- PostgreSQL: epoch 新纪元时间的使用
- postgresql 比较两个时间差大于 N个小时
- PostgreSQL中的函数之日期时间函数(使用EXTRACT函数获取日期中的指定值)
警告
本文最后更新于 January 9, 2022,文中内容可能已过时,请谨慎使用。