PostgreSQL提供了许多返回当前日期和时间的函数。这些 SQL 标准的函数全部都按照当前事务的开始时刻返回值:
select now();
select CURRENT_DATE;
select CURRENT_TIME;
select CURRENT_TIMESTAMP;
select CURRENT_TIME(precision);
select CURRENT_TIMESTAMP(precision);
select LOCALTIME;
select LOCALTIMESTAMP;
select LOCALTIME(precision);
select LOCALTIMESTAMP(precision);
--示例
SELECT CURRENT_TIME;
结果:14:39:53.662522-05
SELECT CURRENT_DATE;
结果:2001-12-23
SELECT CURRENT_TIMESTAMP;
结果:2001-12-23 14:39:53.662522-05
SELECT CURRENT_TIMESTAMP(2);
结果:2001-12-23 14:39:53.66-05
SELECT LOCALTIMESTAMP;
结果:2001-12-23 14:39:53.662522
通过now()获取的时间是最完整的时间,包括时区,秒也保留到了6位小数。
CURRENT_TIME
和CURRENT_TIMESTAMP
传递带有时区的值;
LOCALTIME
和LOCALTIMESTAMP
传递的值不带时区。
CURRENT_TIME
、CURRENT_TIMESTAMP
、LOCALTIME
和 LOCALTIMESTAMP
可以有选择地接受一个精度参数, 该精度导致结果的秒域被园整为指定小数位。如果没有精度参数,结果将被给予所能得到的全部精度。
PostgreSQL同样也提供了返回当前语句开始时间的函数, 它们会返回函数被调用时的真实当前时间。这些非 SQL 标准的函数列表如下:
select transaction_timestamp();
select statement_timestamp();
select clock_timestamp();
select timeofday();
select now();
transaction_timestamp()
等价于CURRENT_TIMESTAMP
,但是其命名清楚地反映了它的返回值。
statement_timestamp()
返回当前语句的开始时刻(更准确的说是收到 客户端最后一条命令的时间)。
statement_timestamp()
和transaction_timestamp()
在一个事务的第一条命令期间返回值相同,但是在随后的命令中却不一定相同。
clock_timestamp()
返回真正的当前时间,因此它的值甚至在同一条 SQL 命令中都会变化。
timeofday()
是一个有历史原因的PostgreSQL函数。和clock_timestamp()
相似,timeofday()
也返回真实的当前时间,但是它的结果是一个格式化的text
串,而不是timestamp with time zone
值。
now()
是PostgreSQL的一个传统,等效于transaction_timestamp()
。
将带有时区的格式的时间转换为不带时区的。类型转换参考:https://blog.csdn.net/lingyiwin/article/details/107244685
select now()::timestamp(0)without time zone;(current_timestamp 是和now()一样的)
表 9.30. 日期/时间函数 参考postgreSQL文档
函数 | 返回类型 | 描述 | 例子 | 结果 |
---|---|---|---|---|
| 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 |