最近在项目中维护某一张表的固定数据的时候,经常会用到postgreSQL的各种日期函数,所以简单整理一下。

获取系统时间的函数

获取当前完整时间

  • 通过now()获取的时间是最完整的时间,包括时区,秒也保留到了6位小数。

    1
    2
    3
    
    select now();
    -- 得到如下结果
    '2018-03-19 21:28:31.545145+08'
  • current_timestamp 效果是和now()一样的。

    1
    2
    3
    
    select current_timestamp效果是和now;
    -- 得到如下结果
    '2018-03-19 21:29:31.545145+08'

    获取当前时间

  • current_time 只显示当前的时间,不包括日期

    1
    2
    3
    
    select current_time;
    --    得到的结果如下
       21:29:31.545145+08'

    获取当前日期

  • current_date 只显示当前的日期,不包括小时等信息

    1
    2
    3
    
    select current_date;
    --     得到的结果如下
       '2018-03-19'

日期计算函数

日期简单的加减

  1. 一年后

    1
    2
    3
    4
    5
    
    select now() + interval '1 years';
    select now() + interval '1 year'; 
    select now() + interval '1 y';
    select now() + interval '2 Y';
    select now() + interval '2Y'; 

    这几种写法都OK的。

  2. 一个月后

    1
    
    select now() + interval '1 month';
  3. 一周后

    1
    
    select now() + interval '1 week';
  4. 一天后

    1
    
    select now() + '1 day'
  5. 一分钟后

    1
    
    select now() + '1 min';   

interval 可以不写,其值可以是:

AbbreviationMeaning
YYears
MMonths (in the date part)
WWeeks
DDays
HHours
MMinutes (in the time part)
SSeconds

计算时间差

使用 age(timestamp, timestamp)计算时间差 函数描述:计算两个日期之间相隔多少天,单个参数时表示与当前日期(current_date)相比 参数:age(timestamp,timestamp),age(timestamp) 返回值:interval,两个日期之间的相隔天数

示例:

1
2
Select age(timestamp '2001-04-10', timestamp '1957-06-13')
Result: 43 years 9 mons 27 days

时间字段的截取

在开发的过程中,有时候经常会用到日期的年,月,日,小时等值,PostgreSQL给我们 提供了一个非常便利的EXTRACT函数。

1
EXTRACT(field FROM source)

field 表示取的时间对象,source 表示取的日期来源,类型为 timestamp、time 或 interval。 * 取年份

1
2
select extract(year from now());
Result: 2018
  • 取月份

    1
    2
    3
    4
    
    select extract(month from now());
    Result: 3
    select extract(day from timestamp '1994-08-20');
    Result: 8
  • 查看今天是一年中的第几天

    1
    
    select extract(doy from now());
  • 查看现在距1970-01-01 00:00:00 UTC 的秒数

    1
    
    select extract(epoch from now());
  • 把epoch 值转换回时间戳

    1
    
    SELECT TIMESTAMP WITH TIME ZONE 'epoch' + 1369755555 * INTERVAL '1 second'; 

结语

以上是基本的PG时间/日期函数使用,有些函数因为下班了,家里电脑没环境,没跑结果出来,明天补上。(明日复明日。。明日何其多。。)

详细用法请参考:PostgreSQL官方说明