1. 程式人生 > >Postgresql 日期和時間型別

Postgresql 日期和時間型別

timestamp with[out] time zone    日期時間(時區)  
time with[out] time zone   		 只用於一日內的時間(時區)    

可以精確到毫秒。MySQL只能到秒。
預設都不會顯示時區,需要顯示的指定with time zone。

highgo=# select time '120900';
   time   
----------
 12:09:00
(1 row)

highgo=# select time '120900 PST';
   time   
----------
 12:09:00
(1 row)

highgo=# select time WITH time zone '120900 PST';
   timetz    
-------------
 12:09:00-08
(1 row)



在輸入日期時,有很多種格式。有時候需要確定datestyle。

highgo=# create table t(date date);
CREATE TABLE
highgo=# insert into t values (date '12-18-2010');
INSERT 0 1
highgo=# select * from t;
    date    
------------
 2010-12-18
(1 row)

highgo=# show datestyle;
 DateStyle 
-----------
 ISO, MDY
(1 row)

highgo=# set datestyle = 'YMD';
SET

highgo=# insert into t values (date '2010-12-19');
INSERT 0 1
highgo=# select * from t;
    date    
------------
 2010-12-18
 2010-12-19
(2 rows)


注: 建議使用 2017-12-18 這種方式輸入日期。任何方式下都是2017年12月18日。

PostgreSQL 提供可許多返回當前日期和時間的函式。
部分函式按照當前事務的開始時刻返回結果:
CURRENT_DATE
CURRENT_TIME
CURRENT_TIMESTAMP
CURRENT_TIME(precision)
LOCALTIME
LOCALTIMESTAMP
now()
transaction_timestamp()  感覺這個描述更符合實際情況

另外部分函式返回實時時間值,在事務中也會隨時間變化。
statement_timestamp()
clock_timestamp()
timeofday()              返回的是text字串


在同一個事務中,和now()同類型的函式不會變化,和statement_timestamp()同類型的函式則相反。

highgo=# begin;
BEGIN
highgo=# select now();
              now              
-------------------------------
 2017-12-18 12:18:32.263891+08
(1 row)

highgo=# select now();
              now              
-------------------------------
 2017-12-18 12:18:32.263891+08
(1 row)

highgo=# select statement_timestamp();
      statement_timestamp      
-------------------------------
 2017-12-18 12:19:15.463267+08
(1 row)

highgo=# select statement_timestamp();
      statement_timestamp      
-------------------------------
 2017-12-18 12:19:18.975693+08
(1 row)

highgo=# commit;
COMMIT

By 天蠍座