最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

PostgreSQL時間日期的語法及注意事項

 更新時間:2023年01月13日 11:36:37   作者:昊文宗  
在開發(fā)過程中,經(jīng)常要取日期的年,月,日,小時等值,PostgreSQL 提供一個非常便利的EXTRACT函數(shù),這篇文章主要給大家介紹了關(guān)于PostgreSQL時間日期的語法及注意事項的相關(guān)資料,需要的朋友可以參考下

sql時間用法

PostgreSQL 提供了大量用于獲取系統(tǒng)當(dāng)前日期和時間的函數(shù),例如 current_date、current_time、current_timestamp、clock_timestamp()、localtimestamp、now()、statement_timestamp()等;同時還支持延遲語句執(zhí)行的 pg_sleep()等函數(shù)

數(shù)據(jù)庫有很多,mysql、sqlserver等存在存儲過程,所需要用到的函數(shù)各不相同,本文列舉一下PostgreSQL的語法。
日期和時間函數(shù)主要用來處理日期和時間值,一般的日期函數(shù)除了使用date類型的參數(shù)外,也可以使用datetime或者timestamp類型,但會忽略這些值的時間部分。相同的以time類型值為參數(shù)的函數(shù),可以接受timestamp類型的參數(shù),但會忽略日期部分。

獲取當(dāng)前日期的函數(shù)&&獲取當(dāng)前時間的函數(shù)

1、獲取當(dāng)前日期的函數(shù)和獲取當(dāng)前時間的函數(shù):current_date和current_time

2、調(diào)用該函數(shù)時不需要在函數(shù)名后加括號。該日期是服務(wù)器的日期,不是客戶端的日期。

注意:

上面所有的函數(shù),包括 CURRENT_DATE,返回的都是當(dāng)前事務(wù)開始的時間。在同一個事務(wù)期間,多次調(diào)用相同的函數(shù)將會返回相同的值,結(jié)果不會隨著時間增加。這一點與其他數(shù)據(jù)庫的實現(xiàn)可能不同。

獲取當(dāng)前日期的函數(shù)

current_date函數(shù):的作用是將當(dāng)前日期按照“YYYY-MM-DD”格式的值返回,具體格式根據(jù)函數(shù)用在字符串或是數(shù)字語境中而定的。

select current_date;

獲取當(dāng)前時間的函數(shù)

current_time函數(shù):的作用是將當(dāng)前時間以“HH:MM:SS”的格式返回,具體格式根據(jù)函數(shù)用在字符串或是數(shù)字語境中而定的。

select current_time;;

localtime函數(shù):的作用是將當(dāng)前時間以“HH:MM:SS”的格式返回并且localtime沒有時區(qū)。

select localtime;

獲取當(dāng)前日期加時間的函數(shù)

基本上current_timestamp,transaction_timestamp()和now()完全相同。current_timestamp是一個函數(shù)的語法奇怪,沒有尾對括號,這是根據(jù)sql標(biāo)準(zhǔn)。

如果未在sql語句中聲明函數(shù)調(diào)用的列別名(需要一個),則別名默認(rèn)為函數(shù)的名稱。在內(nèi)部,標(biāo)準(zhǔn)sql current_timestamp使用now()實現(xiàn),并在您查看默認(rèn)列別名時顯示。

函數(shù): current_timestamp

select current_timestamp;

函數(shù): transaction_timestamp()

transaction_timestamp() 等價于 current_timestamp,但是作用更加明確。

select transaction_timestamp();

函數(shù): statement_timestamp()

statement_timestamp()返回當(dāng)前語句的開始時間,更準(zhǔn)確地說,應(yīng)該是接收到客戶端最新命令的時間。與transaction_timestamp相比,對于事務(wù)中的第一個命令返回的結(jié)果相同,但隨后再執(zhí)行 statement_timestamp() 將會返回不同的值。

select transaction_timestamp();
select statement_timestamp();

BEGIN;
	BEGIN
	SELECT statement_timestamp();   
	     
	SELECT pg_sleep(3);
	
	SELECT statement_timestamp();
	
	COMMIT;
COMMIT

兩次執(zhí)行結(jié)果之間相差了 3 秒左右。

當(dāng)我們在存儲過程(Stored Procedure)中進(jìn)行調(diào)試時,通常需要打印不同語句消耗的時間;此時就需要使用 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;

函數(shù): clock_timestamp()

clock_timestamp()與statement_timestamp()相比,后者是接收到客戶端信息的時候更新時間,而clock_timestamp()接受到信息以后每次調(diào)用這個函數(shù)打印的時間戳都不一樣。返回的是實際時間。

SELECT clock_timestamp();
SELECT clock_timestamp() FROM generate_series(1,10);

clock_timestamp() 返回當(dāng)前實際的時間,即使在同一個 SQL 語句中也可能返回不同的值:

因為我使用的是Dbeaver客戶端,所以返回的精度不高。正常來說,查詢語句在 1 秒鐘內(nèi)返回了 10 條記錄,但是每條記錄產(chǎn)生的時間都不相同。

函數(shù): timeofday()

timeofday()與clock_timestamp()一樣返回的是實際的時間,不過timeofday()函數(shù)返回類型是一個格式化的字符串,而不是 timestamp with time zone:

SELECT timeofday();
SELECT timeofday() FROM generate_series(1,10);

函數(shù): now()

now()與transaction_timestamp() 一樣

select now() ;

注意: now() 是 PostgreSQL 中與 transaction_timestamp() 等價的一個傳統(tǒng)函數(shù),同一個事務(wù)中的結(jié)果不會改變。

另外,所有的日期/時間數(shù)據(jù)類型都支持使用字面值’now’指定當(dāng)前日期和時間(當(dāng)前事務(wù)開始時間)。因此,以下語句效果相同:

SELECT CURRENT_TIMESTAMP;
SELECT now();
SELECT TIMESTAMP 'now';

另外,PostgreSQL 還提供了其他幾個特殊的日期和時間字面值:

以上函數(shù)分別返回 UTC 1970 年 1 月 1 日零點、今天午夜、明天午夜、昨天午夜以及 UTC 零點。

延遲執(zhí)行

以下函數(shù)可以用于延遲服務(wù)器進(jìn)行的操作:

pg_sleep(seconds)
pg_sleep_for(interval)
pg_sleep_until(timestamp with time zone)

函數(shù): pg_sleep()

pg_sleep 將當(dāng)前會話的進(jìn)行暫停指定的秒數(shù)。seconds 的類型為 double precision,所以支持小數(shù)秒。我們在面前使用了該函數(shù)。

select pg_sleep(10);

函數(shù): pg_sleep_for ()

pg_sleep_for 執(zhí)行一個延遲的時間間隔,通常用于指定一個較大的延遲。

select pg_sleep_for('2 minutes');

函數(shù): pg_sleep_until()

pg_sleep_until 可以用于指定一個進(jìn)程的喚醒時間。

select pg_sleep_until('tomorrow 05:00');

以上示例分別暫停 1.5 秒、5 分鐘以及直到明天 5 點,在特定的存儲過程里面,可以滿足一些需求。
==注意:==使用這些延遲函數(shù)時,確保當(dāng)前會話沒有鎖定過多的資源;否則,其他會話將會一直等待,導(dǎo)致系統(tǒng)性能的下降。

時間和日期函數(shù)

to_char(timestamp, text)

to_char(timestamp, text)

將時間戳轉(zhuǎn)換為字符串。

SELECT to_char(current_timestamp, 'HH:MI:SS')

to_char(int, text)

to_char(int, text)

將整數(shù)轉(zhuǎn)換為字符串。

select to_char(125, '999');

to_char(double precision, text)

to_char(double precision, text)

將實數(shù)或雙精度數(shù)轉(zhuǎn)換為字符串。

select to_char(125.8::real, '999D9');

to_date(text, text)

to_date(text, text)

將字符串轉(zhuǎn)換為日期。

select to_date('22 Oct 2022', 'DD Mon YYYY');

select to_date('2022-10-20', 'yyyy-mm-dd');

to_number(text, text)

to_number(text, text)

將字符串轉(zhuǎn)換為數(shù)字。

select to_number('12,454.8-', '99G999D9S');

to_timestamp(text, text)

to_timestamp(text, text)

將字符串轉(zhuǎn)換為時間戳。

select to_timestamp('05 Dec 2000', 'DD Mon YYYY')

date - date

date - date

日期的減法運算。

select date '2020-01-01' - date '2020-01-05'

1

date_part(text, timestamp)

date_part(text, timestamp)

從時間戳中獲取子字段。

select date_part('hour', timestamp '2001-02-16 20:38:40')

date_trunc(text, timestamp)

date_trunc(text, timestamp)

截斷時間戳到指定精度。

select date_trunc('hour', timestamp '2001-02-16 20:38:40')

extract(field from timestamp)

extract(field from timestamp)

從時間戳中獲取子字段。

select extract(hour from timestamp '2001-02-16 20:38:40')

make_date(year int, month int, day int)

make_date(year int, month int, day int)

使用年月日創(chuàng)建日期。

select make_date(2013, 7, 15);

使用timestamp來比較時間

使用timestamp來比較時間

select '2020-01-01' < '2019-01-01'::timestamp+ '360 day'

使用interval添加時間

INTERVAL ‘3’ DAY 時間間隔為3天

INTERVAL ‘2’ HOUR 時間間隔為2小時

總結(jié)

到此這篇關(guān)于PostgreSQL時間日期的語法及注意事項的文章就介紹到這了,更多相關(guān)PostgreSQL時間日期內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Postgresql分布式插件plproxy的使用詳解

    Postgresql分布式插件plproxy的使用詳解

    這篇文章主要介紹了Postgresql分布式插件plproxy的使用詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01
  • PostgreSQL并行計算算法及參數(shù)強(qiáng)制并行度設(shè)置方法

    PostgreSQL并行計算算法及參數(shù)強(qiáng)制并行度設(shè)置方法

    這篇文章主要介紹了PostgreSQL 并行計算算法,參數(shù),強(qiáng)制并行度設(shè)置,本文通過示例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-04-04
  • PostgreSQL教程(五):函數(shù)和操作符詳解(1)

    PostgreSQL教程(五):函數(shù)和操作符詳解(1)

    這篇文章主要介紹了PostgreSQL教程(五):函數(shù)和操作符詳解(1),本文講解了邏輯操作符、比較操作符、數(shù)學(xué)函數(shù)和操作符、三角函數(shù)列表、字符串函數(shù)和操作符等內(nèi)容,需要的朋友可以參考下
    2015-05-05
  • postgresql 導(dǎo)出建表語句的命令操作

    postgresql 導(dǎo)出建表語句的命令操作

    這篇文章主要介紹了postgresql 導(dǎo)出建表語句的命令操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • PgSQl臨時表創(chuàng)建及應(yīng)用實例解析

    PgSQl臨時表創(chuàng)建及應(yīng)用實例解析

    這篇文章主要介紹了PgSQl臨時表創(chuàng)建及應(yīng)用實例解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-12-12
  • PostgreSQL查看帶有綁定變量SQL的通用方法詳解

    PostgreSQL查看帶有綁定變量SQL的通用方法詳解

    今天我們要探討的是 custom執(zhí)行計劃和通用執(zhí)行計劃。這一技術(shù)在 Oracle中被稱為綁定變量窺視。但 Postgresql中并沒有這樣的定義,更嚴(yán)格地說,Postgresql叫做custom執(zhí)行計劃和通用執(zhí)行計劃
    2022-09-09
  • docker安裝Postgresql數(shù)據(jù)庫及基本操作

    docker安裝Postgresql數(shù)據(jù)庫及基本操作

    PostgreSQL是一個強(qiáng)大的開源對象-關(guān)系型數(shù)據(jù)庫管理系統(tǒng),以其高可擴(kuò)展性和標(biāo)準(zhǔn)化而著稱,這篇文章主要介紹了docker安裝Postgresql數(shù)據(jù)庫及基本操作的相關(guān)資料,需要的朋友可以參考下
    2025-03-03
  • Navicat設(shè)置PostgreSQL數(shù)據(jù)庫的表主鍵ID自增的方法

    Navicat設(shè)置PostgreSQL數(shù)據(jù)庫的表主鍵ID自增的方法

    這篇文章主要介紹了Navicat設(shè)置PostgreSQL數(shù)據(jù)庫的表主鍵ID自增的方法,文章通過圖文結(jié)合的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2024-06-06
  • postgresql數(shù)據(jù)庫如何查看數(shù)據(jù)中表的信息

    postgresql數(shù)據(jù)庫如何查看數(shù)據(jù)中表的信息

    這篇文章主要給大家介紹了關(guān)于postgresql數(shù)據(jù)庫如何查看數(shù)據(jù)中表信息的相關(guān)資料,要查詢數(shù)據(jù)表信息,需要用到 系統(tǒng)表或系統(tǒng)視圖等,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-04-04
  • pgsql批量修改sequences的start方式

    pgsql批量修改sequences的start方式

    這篇文章主要介紹了pgsql批量修改sequences的start方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12

最新評論

墨江| 乐至县| 丰原市| 辽源市| 霍城县| 乌恰县| 平原县| 徐闻县| 乌鲁木齐市| 武穴市| 晴隆县| 京山县| 宿州市| 浙江省| 游戏| 民乐县| 塘沽区| 中宁县| 襄垣县| 温州市| 永康市| 开化县| 郧西县| 城步| 浑源县| 深水埗区| 元氏县| 疏勒县| 晋中市| 舞阳县| 南郑县| 余庆县| 太康县| 临泽县| 右玉县| 垣曲县| 平昌县| 兴海县| 崇礼县| 浑源县| 崇明县|