9.9. 时间/日期函数和操作符 您所在的位置:网站首页 from_timestamp函数 9.9. 时间/日期函数和操作符

9.9. 时间/日期函数和操作符

2023-09-04 07:19| 来源: 网络整理| 查看: 265

9.9. 时间/日期函数和操作符9.9.1. EXTRACT, date_part9.9.2. date_trunc9.9.3. AT TIME ZONE9.9.4. 当前日期/时间9.9.5. 延时执行

表 9.30展示了可用于处理日期/时间值的函数,其细节在随后的小节中描述。表 9.29演示了基本算术操作符 (+、*等)的行为。 而与格式化相关的函数,可以参考第 9.8 节。你应该很熟悉第 8.5 节中的日期/时间数据类型的背景知识。

所有下文描述的接受time或timestamp输入的函数和操作符实际上都有两种变体: 一种接收time with time zone或timestamp with time zone, 另外一种接受time without time zone或者 timestamp without time zone。为了简化,这些变种没有被独立地展示。此外,+和*操作符都是可交换的操作符对(例如,date + integer 和 integer + date);我们只显示其中一个。

表 9.29. 日期/时间操作符

操作符例子结果 + date '2001-09-28' + integer '7'date '2001-10-05' + date '2001-09-28' + interval '1 hour'timestamp '2001-09-28 01:00:00' + date '2001-09-28' + time '03:00'timestamp '2001-09-28 03:00:00' + interval '1 day' + interval '1 hour'interval '1 day 01:00:00' + timestamp '2001-09-28 01:00' + interval '23 hours'timestamp '2001-09-29 00:00:00' + time '01:00' + interval '3 hours'time '04:00:00' - - interval '23 hours'interval '-23:00:00' - date '2001-10-01' - date '2001-09-28'integer '3' (days) - date '2001-10-01' - integer '7'date '2001-09-24' - date '2001-09-28' - interval '1 hour'timestamp '2001-09-27 23:00:00' - time '05:00' - time '03:00'interval '02:00:00' - time '05:00' - interval '2 hours'time '03:00:00' - timestamp '2001-09-28 23:00' - interval '23 hours'timestamp '2001-09-28 00:00:00' - interval '1 day' - interval '1 hour'interval '1 day -01:00:00' - timestamp '2001-09-29 03:00' - timestamp '2001-09-27 12:00'interval '1 day 15:00:00' * 900 * interval '1 second'interval '00:15:00' * 21 * interval '1 day'interval '21 days' * double precision '3.5' * interval '1 hour'interval '03:30:00' / interval '1 hour' / double precision '1.5'interval '00:40:00'

表 9.30. 日期/时间函数

函数返回类型描述例子结果 age(timestamp, timestamp) interval减去参数,生成一个使用年、月(而不是只用日)的“符号化”的结果age(timestamp '2001-04-10', timestamp '1957-06-13')43 年 9 月 27 日age(timestamp)interval从current_date(在午夜)减去age(timestamp '1957-06-13')43 years 8 mons 3 days clock_timestamp() timestamp with time zone当前日期和时间(在语句执行期间变化);见第 9.9.4 节    current_date date当前日期;见第 9.9.4 节    current_time time with time zone当前时间(一天中的时间);见第 9.9.4 节    current_timestamp timestamp with time zone当前日期和时间(当前事务开始时);见第 9.9.4 节    date_part(text, timestamp) double precision获得子域(等价于extract);见第 9.9.1 节 date_part('hour', timestamp '2001-02-16 20:38:40')20date_part(text, interval)double precision获得子域(等价于extract);见第 9.9.1 节 date_part('month', interval '2 years 3 months')3 date_trunc(text, timestamp) timestamp截断到指定精度;另见第 9.9.2 节 date_trunc('hour', timestamp '2001-02-16 20:38:40')2001-02-16 20:00:00date_trunc(text, interval)interval截断到指定精度;另见第 9.9.2 节 date_trunc('hour', interval '2 days 3 hours 40 minutes')2 days 03:00:00 extract(field from timestamp) double precision获得子域;见第 9.9.1 节 extract(hour from timestamp '2001-02-16 20:38:40')20extract(field from interval)double precision获得子域;见第 9.9.1 节 extract(month from interval '2 years 3 months')3 isfinite(date) boolean测试有限日期(不是+/-无限)isfinite(date '2001-02-16')trueisfinite(timestamp)boolean测试有限时间戳(不是+/-无限)isfinite(timestamp '2001-02-16 21:28:30')trueisfinite(interval)boolean测试有限间隔isfinite(interval '4 hours')true justify_days(interval) interval调整间隔这样30天时间周期可以表示为月justify_days(interval '35 days')1 mon 5 days justify_hours(interval) interval调整间隔这样24小时时间周期可以表示为日justify_hours(interval '27 hours')1 day 03:00:00 justify_interval(interval) interval使用justify_days和justify_hours调整间隔,使用额外的符号调整justify_interval(interval '1 mon -1 hour')29 days 23:00:00 localtime time当前时间(一天中的时间);见第 9.9.4 节    localtimestamp timestamp当前日期和时间(当前事务的开始);见第 9.9.4 节    make_date(year int, month int, day int) date 从年、月、日域创建日期 make_date(2013, 7, 15)2013-07-15 make_interval(years int DEFAULT 0, months int DEFAULT 0, weeks int DEFAULT 0, days int DEFAULT 0, hours int DEFAULT 0, mins int DEFAULT 0, secs double precision DEFAULT 0.0) interval 从年、月、周、日、时、分、秒域创建 interval make_interval(days => 10)10 days make_time(hour int, min int, sec double precision) time 从时、分、秒域创建时间 make_time(8, 15, 23.5)08:15:23.5 make_timestamp(year int, month int, day int, hour int, min int, sec double precision) timestamp 从年、月、日、时、分、秒域创建时间戳 make_timestamp(2013, 7, 15, 8, 15, 23.5)2013-07-15 08:15:23.5 make_timestamptz(year int, month int, day int, hour int, min int, sec double precision, [ timezone text ]) timestamp with time zone 从年、月、日、时、分、秒域创建带时区的时间戳。如果没有指定timezone, 则使用当前时区。 make_timestamptz(2013, 7, 15, 8, 15, 23.5)2013-07-15 08:15:23.5+01 now() timestamp with time zone当前日期和时间(当前事务的开始);见第 9.9.4 节    statement_timestamp() timestamp with time zone当前日期和时间(当前语句的开始);见第 9.9.4 节    timeofday() text当前日期和时间(像clock_timestamp,但是作为一个text字符串);见第 9.9.4 节    transaction_timestamp() timestamp with time zone当前日期和时间(当前事务的开始);见第 9.9.4 节    to_timestamp(double precision) timestamp with time zone把 Unix 时间(从 1970-01-01 00:00:00+00 开始的秒)转换成 timestampto_timestamp(1284352323)2010-09-13 04:32:03+00

除了这些函数以外,还支持 SQL 操作符OVERLAPS:

(start1, end1) OVERLAPS (start2, end2) (start1, length1) OVERLAPS (start2, length2)

这个表达式在两个时间域(用它们的端点定义)重叠的时候得到真,当它们不重叠时得到假。端点可以用一对日期、时间或者时间戳来指定;或者是用一个后面跟着一个间隔的日期、时间或时间戳来指定。当一对值被提供时,起点或终点都可以被写在前面,OVERLAPS会自动地把较早的值作为起点。每一个时间段被认为是表示半开的间隔start



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有