Skip to the content.

1. 对时间的操作:

在PostgreSQL中可以直接对时间进行加减运算:

SELECT now()::timestamp + '1 year';  --当前时间加1年
SELECT now()::timestamp + '1 month';  --当前时间加一个月
SELECT now()::timestamp + '1 day';  --当前时间加一天
SELECT now()::timestamp + '1 hour';  --当前时间加一个小时
SELECT now()::timestamp + '1 min';  --当前时间加一分钟
SELECT now()::timestamp + '1 sec';  --加一秒钟
select now()::timestamp + '1 year 1 month 1 day 1 hour 1 min 1 sec';  --加1年1月1天1时1分1秒
SELECT now()::timestamp + (col || ' day')::interval FROM table --把col字段转换成天 然后相加

2. 时间间隔1小时

SELECT
    TO_CHAR(TIME, 'yyyy-MM-DD HH24:00:00') AS xtime
FROM
    generate_series(date_trunc('hour',
    (
        SELECT
            to_timestamp('2016-08-11','yyyy-MM-DD 00:00:00') ) ), date_trunc('hour',
    (
        SELECT
            to_timestamp('2016-08-11 20:31:50','yyyy-MM-DD HH24:MI:SS'))), '1 hour') AS tt(TIME)

3. 获取一个时间区间的时间列表

SELECT
    TO_CHAR(DATE(TIME), 'yyyy-MM-DD') AS dispatch_date
FROM
    generate_series( date_trunc('day', DATE %(start_date)s ), date_trunc('day', DATE
    %(end_date)s), '1 day') AS tt(TIME)

4. 获取一个时间区间的每一天

SELECT 
    TO_CHAR(TIME, 'yyyy-MM-DD') AS xtime
FROM generate_series(
        date_trunc('day', (SELECT to_timestamp('2016-08-11','yyyy-MM-DD'))), 
        date_trunc('day',(SELECT to_timestamp('2016-08-20','yyyy-MM-DD'))), 
        '1 day'
    ) AS tt(TIME)