加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 创业 > 正文

PostgreSQL技巧 如何获取当前日期时间

发布时间:2020-10-18 10:02:16 所属栏目:创业 来源:网络整理
导读:这篇文章首要先容了PostgreSQL 怎样获取当前日期时刻及留意事项,文中通过示例代码先容的很是具体,对各人的进修可能事变具有必然的参考进修代价,必要的伴侣们
副问题[/!--empirenews.page--]

  短视频,自媒体,达人种草一站处事

这篇文章首要先容了PostgreSQL 怎样获取当前日期时刻及留意事项,文中通过示例代码先容的很是具体,对各人的进修可能事变具有必然的参考进修代价,必要的伴侣们下面跟着小编来一路进修进修吧

在开拓数据库应用可能调试代码时,常常必要获取体系的当前日期和时刻,我们来看一下 PostgreSQL 中提供的相干函数。

当前日期

CURRENT_DATE

CURRENT_DATE 函数用于获取数据库处事器的当前日期:

postgres=# SELECT CURRENT_DATE;
 current_date
--------------
 2019-09-28
(1 row)

挪用该函数时不必要在函数名后加括号。该日期是处事器的日期,不是客户端的日期。

当前事宜开始时刻

以下函数可以用于获取数据库处事器的当前时刻:

CURRENT_TIME
CURRENT_TIME(precision)
LOCALTIME
LOCALTIME(precision)

CURRENT_TIMESTAMP
CURRENT_TIMESTAMP(precision)
LOCALTIMESTAMP
LOCALTIMESTAMP(precision)

CURRENT_TIME、LOCALTIME、CURRENT_TIMESTAMP、LOCALTIMESTAMP

前面 4 个函数用于获取时刻,后头 4 个函数用于获取时刻戳;CURRENT_TIME 和 CURRENT_TIMESTAMP 包括时区信息,LOCALTIME 和 LOCALTIMESTAMP 不包括时区信息。precision 用于指定小数秒的位数,取值为 0 - 6,默以为 6。

postgres=# SELECT CURRENT_TIME, LOCALTIME, CURRENT_TIMESTAMP, LOCALTIMESTAMP;
  current_time  |  localtime  |    current_timestamp    |    localtimestamp   
--------------------+-----------------+-------------------------------+----------------------------
 12:20:50.602412+08 | 12:20:50.602412 | 2019-09-28 12:20:50.602412+08 | 2019-09-28 12:20:50.602412
(1 row)

postgres=# SELECT CURRENT_TIME(3), LOCALTIME(3), CURRENT_TIMESTAMP(3), LOCALTIMESTAMP(3);
 current_time  | localtime  |   current_timestamp   |   localtimestamp  
-----------------+--------------+----------------------------+-------------------------
 12:28:03.547+08 | 12:28:03.547 | 2019-09-28 12:28:03.547+08 | 2019-09-28 12:28:03.547
(1 row)

留意: 上面全部的函数,包罗 CURRENT_DATE,返回的都是当前事宜开始的时刻。在统一个事宜时代,多次挪用沟通的函数将会返回沟通的值,功效不会跟着时刻增进。这一点与其他数据库的实现也许差异。

以下示例行使 pg_sleep 函数停息 3 秒再次获取当前时刻:

postgres=# BEGIN;
BEGIN
postgres=# SELECT CURRENT_TIMESTAMP;
    current_timestamp   
-------------------------------
 2019-09-28 12:43:57.075609+08
(1 row)

postgres=# SELECT pg_sleep(3);
 pg_sleep
----------
(1 row)

postgres=# SELECT CURRENT_TIMESTAMP;
    current_timestamp   
-------------------------------
 2019-09-28 12:43:57.075609+08
(1 row)

postgres=# COMMIT;
COMMIT

在事宜中两次获取的时刻沟通。

当前语句开始时刻

PostgreSQL 还提供了其他获取时刻的函数:

transaction_timestamp()
statement_timestamp()
clock_timestamp()
timeofday()
now()

transaction_timestamp()

transaction_timestamp() 等价于 CURRENT_TIMESTAMP,可是浸染越发明晰。

statement_timestamp()

statement_timestamp() 返回当前语句的开始时刻,更精确地说,应该是吸取到客户端最新呼吁的时刻。statement_timestamp() 和 transaction_timestamp() 对付事宜中的第一个呼吁返回的功效沟通,但随后再执行 statement_timestamp() 将会返回差异的值。

postgres=# BEGIN;
BEGIN
postgres=# SELECT statement_timestamp();
   statement_timestamp  
-------------------------------
 2019-09-28 13:11:14.497135+08
(1 row)

postgres=# SELECT pg_sleep(3);
 pg_sleep
----------
(1 row)

postgres=# SELECT statement_timestamp();
   statement_timestamp  
-----------------------------
 2019-09-28 13:11:17.5141+08
(1 row)

postgres=# COMMIT;
COMMIT

两次执行功效之间相差了 3 秒阁下。

当我们在存储进程(Stored Procedure)中举办调试时,凡是必要打印差异语句耗损的时刻;此时就必要行使 statement_timestamp(),而不能行使 CURRENT_TIMESTAMP 可能 transaction_timestamp():

CREATE OR REPLACE sp_test
...
DECLARE
 lts_systimestamp timestamp;
BEGIN;
 lts_systimestamp := statement_timestamp();
 ...
 RAISE NOTICE 'Step 1 take time: %', statement_timestamp() - lts_systimestamp;
 ...
END;

clock_timestamp()

clock_timestamp() 返回当前现实的时刻,纵然在统一个 SQL 语句中也也许返回差异的值:

postgres=# SELECT clock_timestamp() FROM generate_series(1,10);
    clock_timestamp   
-------------------------------
 2019-09-28 13:18:55.659778+08
 2019-09-28 13:18:55.659786+08
 2019-09-28 13:18:55.659788+08
 2019-09-28 13:18:55.65979+08
 2019-09-28 13:18:55.659791+08
 2019-09-28 13:18:55.659793+08
 2019-09-28 13:18:55.659795+08
 2019-09-28 13:18:55.659797+08
 2019-09-28 13:18:55.659799+08
 2019-09-28 13:18:55.659801+08
(10 rows)

查询语句在 1 秒钟内返回了 10 笔记录,可是每笔记录发生的时刻都不沟通。

timeofday()

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读