1.时间间隔age函数 函数描述:计算两个日期之间相隔多少天,单个参数时表示与当前日期(current_date)相比 参数:age(timestamp,timestamp),age(timestamp) 返回值:interval,两个日期之间的相隔天数 示例: Select age(timestamp '2001-04-10',timestamp '1957-06-13') Result: 43 years 9 mons 27 days 2.获取当前日期和时间的关键字和函数 A.Current_date:获取当前的日期 SELECT CURRENT_DATE; Result:2001-12-23 B.Current_time:获取当前时间 SELECT CURRENT_TIME; Result: 14:39:53.662522-05 C.Current_tiestamp:获取当前日期和时间,开始于当前的事务 SELECT CURRENT_TIMESTAMP; Result:2001-12-23 14:39:53.662522-05 D.LOCALTIMESTAMP: 获取当前日期和时间,开始于当前的事务 SELECT LOCALTIMESTAMP; Result: 2001-12-23 14:39:53.662522 E.Now():获取当前日期和时间,开始于当前事务 注意点:这里的获取当前时间,日期的关键字或者函数都包含了开始于当前的事务,其含义是这个时间的获取的时刻为事务开始的时候,更重要的是在整个事务结束之前这个时间是不会变的,换句话说它在事务的过程中始终是一个值。 示例: 创建自定义函数f_test_time: create or replace function f_test_time() returns void as $$ begin raise notice 'time is %',now(); execute 'select pg_sleep(5)';--睡眠5秒 raise notice 'time is %',now(); end; $$ LANGUAGE 'plpgsql'; Result: 注意: time is 2015-04-15 10:57:17.588+08 注意: time is 2015-04-15 10:57:17.588+08 不管两句打印语句之间的睡眠5秒的执行结果,now()函数的值是不会表,直到事务结束。 3.获取时钟时间 clock_timestamp:获取当前的日期和时间,随着语句的执行而改变 注意点:如果想在function中知道某条sql语句的执行时间,那么需要用这个时钟函数获取时间和日期,总之只有这个函数是随着语句的执行时间实在变化的。 示例: 现将f_test_time函数中添加一条 raise notice 'clock time is %',clock_timestamp();来显示睡眠5秒是否起到了作用。 create or replace function f_test_time() returns void as $$ begin raise notice 'time is %',now(); raise notice 'clock time is %',clock_timestamp(); end; $$ LANGUAGE 'plpgsql'; Result: 注意: time is 2015-04-15 11:05:40.894+08 注意: time is 2015-04-15 11:05:40.894+08 注意: clock time is 2015-04-15 11:05:45.921+08 4.截取时间 Extract:截取timestamp,存在两个重载函数, extract(field from timestamp), extract(field from interval) select extract(hour from timestamp '2001-02-16 20:38:40'); Result:20 这里需要掌握的是field值的选择,不同的需求时不一样的,如: Century:获取世纪 SELECT EXTRACT(CENTURY FROM TIMESTAMP '2015-04-15 20:38:40'); Result: 21 Day:获取timestamp中的天数和获取时间间隔中的天数 SELECT EXTRACT(DAY FROM TIMESTAMP '2001-02-16 20:38:40'); Result: 16 SELECT EXTRACT(DAY FROM INTERVAL '40 days 1 minute'); Result: 40 Year:获取年 Decade:获取年的值并且除以10 Dow:获取一个星期中的第几天Sunday(0) to Saturday(6) Doy:一年中的第几天 Epoch:距离1970-01-01 00:00:00多少秒 Hour:获取小时数 Minute:获取分钟 Month:获取月份 Quarter:获取季度 Second:获取秒 Timezone:获取时区 Week:获取一年中第几周 还有一个类似extract的函数date_part('field',source),其field的值一样,field就是纯粹的字符串,如: SELECT date_part('day',TIMESTAMP '2015-02-16 20:38:40'); Result: 16 SELECT date_part('hour',INTERVAL '4 hours 3 minutes'); Result: 4 5.截断时间 date_trunc('field',source),直接看例子就明白了, SELECT date_trunc('hour',TIMESTAMP '2001-02-16 20:38:40'); Result: 2001-02-16 20:00:00 结果显示直接将field = hour,即分和秒截断了,如果是hour那么minute和second的值就为00,如果是month那么day=1,如果是year那么month和day均为1。 6.判断时间是否重合 OVERLAPS:返回bool值,判断两个时间间隔是否重合,只要存在重合即返回true否者返回false。两个重载的方式 (start1,end1) OVERLAPS (start2,end2) (start1,length1) OVERLAPS (start2,length2) 第一个指start1 到end1和start2到length2两个时间段是否重合 第二个值start1开始加上length1的时间间隔与start2时间开始加上length2的时间间隔,返回两个间隔是否存在重合。 需要注意的是边界值是否被包含,遵循start <= time < end 示例: SELECT (DATE '2015-02-16',DATE '2015-12-21') OVERLAPS (DATE '2015-10-30',DATE '2015-10-30'); Result: true SELECT (DATE '2001-02-16',INTERVAL '100 days') OVERLAPS (DATE '2001-10-30',DATE '2002-10-30'); Result: false SELECT (DATE '2001-10-29',DATE '2001-10-30') OVERLAPS (DATE '2001-10-30',DATE '2001-10-31'); Result: false SELECT (DATE '2001-10-30',DATE '2001-10-31'); Result: true
原文链接:https://www.f2er.com/postgresql/195254.html