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字段转换成天 然后相加
相关函数:
例子:需求是查询lztest和hftest,假定为任务表(lztest)和工作表(zftest),一对多的关系
1、查询获取数据,要求获取创建任务超过五天时未工作的数据
获取lztest表数据入库时间(sjrksj)距离现在超过五天的数据(pgSQL)
//该sql可以获取下发任务超过5天的数据
SELECT
lz.* ,
max(hf.hfsj)
FROM
lztest lz
LEFT JOIN hftest hf ON hf.lz_id = lz.id
WHERE
now() > ( SELECT lz.sjrksj + '5 day' AS times )
GROUP BY lz.id
此时如果在select后加入·hf.xxx会报错
ERROR: column “hf.xxx” must appear in the GROUP BY clause or be used in an aggregate function
意思是hf.xxx字段必须在 GROUP BY 中出现或者被用于聚合函数,在group by后加入hf.xxx(这里不能显示工作表里面的信息)
2、现在想要把所有的任务信息展示,但要区分超过五天未工作的数据
SELECT
tab.id as xxx,
sw.*
FROM
lztest lz
left join(
SELECT
lz.* ,
max(hf.hfsj)
FROM
lztest lz
LEFT JOIN hftest hf ON hf.lz_id = lz.id
WHERE
now() > ( SELECT lz.sjrksj + '5 day' AS times )
GROUP BY lz.id
)tab ON tab.id = lz.id
这样就可以通过tab.id区分开,tab.id有值的是超过五天未工作的,为null的是其他情况(工作的和没有超过5天的)