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