1. 程式人生 > >PostgreSql函式和操作符一之時間函式

PostgreSql函式和操作符一之時間函式

PostgreSql常用的時間函式

1.時間間隔age函式
函式描述:計算兩個日期之間相隔多少天,單個引數時表示與當前日期(current_date)相比
引數:age(timestamp,timestamp),age(timestamp)
返回值:interval,兩個日期之間的相隔天數
示例:
Select age(timestamp '2001-04-10', timestamp '1957-06-13')
Result: 43 years 9 mons 27 days
2.獲取當前日期和時間的關鍵字和函式
A.Current_date:獲取當前的日期
SELECT CURRENT_DATE;
Result:2001-12-23
B.Current_time:獲取當前時間
SELECT CURRENT_TIME;
Result: 14:39:53.662522-05
C.Current_tiestamp:獲取當前日期和時間,開始於當前的事務
SELECT CURRENT_TIMESTAMP;
Result:2001-12-23 14:39:53.662522-05
D.LOCALTIMESTAMP: 獲取當前日期和時間,開始於當前的事務
SELECT LOCALTIMESTAMP;
Result: 2001-12-23 14:39:53.662522
E.Now():獲取當前日期和時間,開始於當前事務

注意點:這裡的獲取當前時間,日期的關鍵字或者函式都包含了開始於當前的事務,其含義是這個時間的獲取的時刻為事務開始的時候,更重要的是在整個事務結束之前這個時間是不會變的,換句話說它在事務的過程中始終是一個值。

示例:
建立自定義函式f_test_time:
create or replace function f_test_time() returns void as $$
begin

raise notice 'time is %',now();
execute 'select pg_sleep(5)';--睡眠5秒
raise notice 'time is %',now();

end;
$$ LANGUAGE 'plpgsql';

Result:
注意:  time is 2015-04-15 10:57:17.588+08
注意:  time is 2015-04-15 10:57:17.588+08

不管兩句列印語句之間的睡眠5秒的執行結果,now()函式的值是不會表,直到事務結束。
3.獲取時鐘時間
clock_timestamp:獲取當前的日期和時間,隨著語句的執行而改變
注意點:如果想在function中知道某條sql語句的執行時間,那麼需要用這個時鐘函式獲取時間和日期,總之只有這個函式是隨著語句的執行時間實在變化的。

示例:
現將f_test_time函式中新增一條
raise notice 'clock time is %',clock_timestamp();來顯示睡眠5秒是否起到了作用。
create or replace function f_test_time() returns void as $$
begin

raise notice 'time is %',now();
execute 'select pg_sleep(5)';--睡眠5秒
raise notice 'time is %',now();
raise notice 'clock time is %',clock_timestamp();
end;
$$ LANGUAGE 'plpgsql';

Result:
注意:  time is 2015-04-15 11:05:40.894+08
注意:  time is 2015-04-15 11:05:40.894+08
注意:  clock time is 2015-04-15 11:05:45.921+08
4.擷取時間
Extract:擷取timestamp,存在兩個過載函式,
extract(field from timestamp),
extract(field from interval)
select extract(hour from timestamp '2001-02-16 20:38:40');
Result:20
這裡需要掌握的是field值的選擇,不同的需求時不一樣的,如:
Century:獲取世紀
SELECT EXTRACT(CENTURY FROM TIMESTAMP '2015-04-15 20:38:40');
Result: 21
Day:獲取timestamp中的天數和獲取時間間隔中的天數
SELECT EXTRACT(DAY FROM TIMESTAMP '2001-02-16 20:38:40');
Result: 16
SELECT EXTRACT(DAY FROM INTERVAL '40 days 1 minute');
Result: 40
Year:獲取年
Decade:獲取年的值並且除以10
Dow:獲取一個星期中的第幾天Sunday(0) to  Saturday(6) 
Doy:一年中的第幾天
Epoch:距離1970-01-01 00:00:00多少秒
Hour:獲取小時數
Minute:獲取分鐘
Month:獲取月份
Quarter:獲取季度
Second:獲取秒
Timezone:獲取時區
Week:獲取一年中第幾周


還有一個類似extract的函式date_part('field', source),其field的值一樣,field就是純粹的字串,如:
SELECT date_part('day', TIMESTAMP '2015-02-16 20:38:40');
Result: 16
SELECT date_part('hour', INTERVAL '4 hours 3 minutes');
Result: 4
5.截斷時間
date_trunc('field', source),直接看例子就明白了,
SELECT date_trunc('hour', TIMESTAMP '2001-02-16 20:38:40');
Result: 2001-02-16 20:00:00
結果顯示直接將field = hour,即分和秒截斷了,如果是hour那麼minute和second的值就為00,如果是month那麼day=1,如果是year那麼month和day均為1。
6.判斷時間是否重合
OVERLAPS:返回bool值,判斷兩個時間間隔是否重合,只要存在重合即返回true否者返回false。兩個過載的方式
(start1, end1) OVERLAPS (start2, end2)
(start1, length1) OVERLAPS (start2, length2)
第一個指start1 到end1和start2到length2兩個時間段是否重合
第二個值start1開始加上length1的時間間隔與start2時間開始加上length2的時間間隔,返回兩個間隔是否存在重合。

需要注意的是邊界值是否被包含,遵循start <= time < end
示例:
     SELECT (DATE '2015-02-16', DATE '2015-12-21') OVERLAPS
      (DATE '2015-10-30', DATE '2015-10-30');
Result: true
SELECT (DATE '2001-02-16', INTERVAL '100 days') OVERLAPS
       (DATE '2001-10-30', DATE '2002-10-30'); 
Result: false
SELECT (DATE '2001-10-29', DATE '2001-10-30') OVERLAPS
       (DATE '2001-10-30', DATE '2001-10-31');
Result: false
SELECT (DATE '2001-10-30', DATE '2001-10-30') OVERLAPS
       (DATE '2001-10-30', DATE '2001-10-31');
Result: true

相關推薦

PostgreSql函式操作符時間函式

PostgreSql常用的時間函式 1.時間間隔age函式 函式描述:計算兩個日期之間相隔多少天,單個引數時表示與當前日期(current_date)相比 引數:age(timestamp,timestamp),age(timestamp) 返回值:interval,兩個

PostgreSQL函式操作符

一、邏輯操作符:     常用的邏輯操作符有:AND、OR和NOT。其語義與其它程式語言中的邏輯操作符完全相同。二、比較操作符:     下面是PostgreSQL中提供的比較操作符列表: 操作符 描述 < 小於 > 大於 <= 小於或等於 >= 大

PostgreSQL常用字串函式操作符

一、邏輯操作符:     常用的邏輯操作符有:AND、OR和NOT。其語義與其它程式語言中的邏輯操作符完全相同。二、比較操作符:     下面是PostgreSQL中提供的比較操作符列表: 操作符 描述 < 小於 > 大於 <= 小於或等於 >

【資料庫】【SQL高階】*MySQL資料庫函式操作符”(數值函式部分#常用#:方便查閱使用)#資料庫SQL知識彙總#(四)-2018.11.27- #轉載#

四、數值函式 4.1 算數操作符 DIV整數除法。 類似於 FLOOR(),然而使用BIGINT 演算法也是可靠的。 4.2 數學函式 若發生錯誤,所有數學函式會返回 NULL 。 ABS(X):返回X 的絕對值。該函式支援使用BIGINT值。

Mysql-12章-函式操作符 (翻譯+理解)

文章目錄 12.1 函式和操作符一覽   表示式可以在SQL語句中的某些地方使用,SELECT中的ORDER BY和HAVING子句內, SELECT, DELETE,UPDATE這些語句中的WHERE內,SET語句內。 表示式可以使用文字值,列值,N

oraclepercent_rank() over()函式PERCENTILE_CONT() within group()over()函式詳解

建立一個臨時表 create table EMP ( EMPNO NUMBER(4) not null, ENAME VARCHAR2(10), JOB VARCHAR2(9), MGR NUMBER(4), HIREDATE DATE, SAL

PL/SQL字串宣告、字串函式操作符例項原始碼說明

            PL/SQL字串實際上是一個可選的尺寸規格字元序列。字元可以是數字,字母,空白,特殊字元或全部的組合。 PL/SQL提供了三種類型的字串:固定長度字串:在這樣的字串,程式設計師指定的長度,同時宣告該字串。該字串是右填充空格以達到指定的長度。變長字串:在

8Linux伺服器程式設計:chdir()函式cd命令,getcwd()函式pwd

 1chdir依賴的標頭檔案 #include<unistd.h> 2函式定義 int chdir(const char *path); int fchdir(int fd)

jmeter函式時間函式__time

企鵝交流群>79642549 常用於帶時間戳的地方 比如:帶時間戳的結果檔案,每次執行生成獨立檔案 ${__time(,)} 1450056496991 //無格式化引數,

14.C語言中time函式localtime獲取系統時間日期

C語言中time函式和localtime獲取系統時間和日期可以通過time()函式來獲得計算機系統當前的日曆時間(Calendar Time),處理日期時間的函式都是以本函式的返回值為基礎進行運算。1. time 函式 返回1970-1-1, 00:00:00以來經過的秒數 

虛解構函式純虛解構函式的作用

1 虛解構函式 作用: 當使用基類的指標刪除一個派生類的物件時,可以呼叫派生類的解構函式。由於有虛擬函式表的存在,這裡就發生了多型,使得派生類的解構函式能夠被呼叫。反之,如果基類的解構函式不是虛擬函式,則使用基類的指標刪除派生類的物件時,不會呼叫派生類的解構函式

tf.gfile函式gfile.MakeDirs(FLAGS.train_dir)函式的詳細說明

簡介這些函式和python中的os模組非常的相似,一般都可以用os模組代替吧gfile API介紹下面將分別介紹每一個gfile API!2-1)tf.gfile.Copy(oldpath, newpath, overwrite=False)拷貝原始檔並建立目標檔案,無返回,

Android外掛化原理實踐 () 外掛化簡介基本原理簡述

1 外掛化簡介 Android外掛化技術是一種這幾年間非常火爆的技術,也是隻有在中國才流行起來的技術,這幾年間每每開發者大會上幾乎都會提起關於外掛化技術和相關方向。在國內各大網際網路公司無不都有自己的外掛化框架。 外掛化技術到底是什麼? 其實很好理解,像某些App中整合了很多功能點,

C++純虛擬函式Java中的抽象函式區別

一直我對c++純虛擬函式的理解有個誤區:純虛擬函式是不能給出定義的。果然是學藝不精。c++中的純虛擬函式和java中的抽象函式很類似,我把相關概念搞混淆了,這裡總結一下:java中的抽象函式是隻有函式

tf.contrib.seq2seq.BahdanauAttention函式tf.contrib.seq2seq.LuongAttention函式學習

tf.contrib.seq2seq.BahdanauAttention()__init__(     num_units,     memory,     memory_sequence_length=None,     normalize=False,     proba

尤拉函式莫比烏斯函式的求法

#include<iostream> #include<cstdio> #include<cmath> using namespace std; typedef

C++ 複製建構函式賦值運算子過載函式

宣告一個空的類testsize,sizeof(testsize)為1,為其宣告建構函式和解構函式,依舊為1 建構函式不能使用關鍵字virtual,解構函式可以 一旦類中存在虛擬函式,就會為該類生成虛擬函式表,並在每一個例項中新增一個指向虛擬函式表的指標,從而大小為一個指標大

C中的qsort函式C++中的sort函式的理解與使用

一、qsort()函式 原型: _CRTIMP void __cdecl qsort (void*, size_t, size_t,int (*)(const void*, const void*)); 引數解釋: 1、待排序陣列首地址;2、陣列中待排序元素數

每個月的第一天時間 最後時間戳 (預設從本月開始)輸入引數改變月份

//獲得本月第一天0點時間 public static long getTimesMonthmorning(int a){ Calendar c = Calendar.getI

類String的建構函式、拷貝建構函式、解構函式賦值運算子過載函式的實現

#include <iostream> using namespace std; class String { public: String(const char* str= NULL); String(const String& other); ~