Postgresql 中获取当前时间的几种方法,postgreSQL时间函数

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_TIMECURRENT_TIMESTAMP传递带有时区的值

LOCALTIMELOCALTIMESTAMP传递的值不带时区

CURRENT_TIMECURRENT_TIMESTAMPLOCALTIME和 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文档

函数返回类型描述例子结果
age(timestamptimestamp)interval减去参数,生成一个使用年、月(而不是只用日)的“符号化”的结果age(timestamp '2001-04-10', timestamp '1957-06-13')43 年 9 月 27 日
age(timestamp)intervalcurrent_date(在午夜)减去age(timestamp '1957-06-13')43 years 8 mons 3 days
clock_timestamp()timestamp with time zone当前日期和时间(在语句执行期间变化);见第 9.9.4 节  
current_datedate当前日期;见第 9.9.4 节  
current_timetime with time zone当前时间(一天中的时间);见第 9.9.4 节  
current_timestamptimestamp with time zone当前日期和时间(当前事务开始时);见第 9.9.4 节  
date_part(texttimestamp)double precision获得子域(等价于extract);见第 9.9.1 节date_part('hour', timestamp '2001-02-16 20:38:40')20
date_part(textinterval)double precision获得子域(等价于extract);见第 9.9.1 节date_part('month', interval '2 years 3 months')3
date_trunc(texttimestamp)timestamp截断到指定精度;另见第 9.9.2 节date_trunc('hour', timestamp '2001-02-16 20:38:40')2001-02-16 20:00:00
date_trunc(textinterval)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')20
extract(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')true
isfinite(timestamp)boolean测试有限时间戳(不是+/-无限)isfinite(timestamp '2001-02-16 21:28:30')true
isfinite(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_daysjustify_hours调整间隔,使用额外的符号调整justify_interval(interval '1 mon -1 hour')29 days 23:00:00
localtimetime当前时间(一天中的时间);见第 9.9.4 节  
localtimestamptimestamp当前日期和时间(当前事务的开始);见第 9.9.4 节  
make_date(year intmonth intday 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从年、月、周、日、时、分、秒域创建 intervalmake_interval(days => 10)10 days
make_time(hour intmin intsec double precision)time从时、分、秒域创建时间make_time(8, 15, 23.5)08:15:23.5
make_timestamp(year intmonth intday inthour intmin intsec double precision)timestamp从年、月、日、时、分、秒域创建时间戳make_timestamp(2013, 7, 15, 8, 15, 23.5)2013-07-15 08:15:23.5
make_timestamptz(year intmonth intday inthour intmin intsec 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
  • 7
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

EngineerForSoul

你的鼓励是我孜孜不倦的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值