pgsql數據類型:時間類型

時間類型

名字 描述
timestamp [ (p) ] [ without time zone ] 包括日期和時間(無時區(qū))
timestamp [ (p) ] with time zone 包括日期和時間,有時區(qū)
date 日期(沒有一天中的時間)
time [ (p) ] [ without time zone ] 一天中的時間(無日期)
time [ (p) ] with time zone 僅僅是一天中的時間(沒有日期),帶有時區(qū)
interval [ fields ] [ (p) ] 時間間隔

date

就是日期的格式

db=# create table demo_date(date date);
CREATE TABLE
db=# insert into demo_date values('2020-12-12 12:12:23.000');
INSERT 0 1
db=# select * from demo_date;
    date
------------
 2020-12-12
(1 row)

日期輸入的方式可以有很多中龙亲,如下

例子 描述
1999-01-08 ISO 8601; 任何模式下的1月8日 (推薦格式)
January 8, 1999 在任何datestyle輸入模式下都無歧義
1/8/1999 MDY模式中的1月8日羔巢;DMY模式中的8月1日
1/18/1999 MDY模式中的1月18日;在其他模式中被拒絕
01/02/03 MDY模式中的2003年1月2日吴叶; DMY模式中的2003年2月1日阐虚; YMD模式中的2001年2月3日
1999-Jan-08 任何模式下的1月8日
Jan-08-1999 任何模式下的1月8日
08-Jan-1999 任何模式下的1月8日
99-Jan-08 YMD模式中的1月8日,否則錯誤
08-Jan-99 1月8日蚌卤,除了在YMD模式中錯誤
Jan-08-99 1月8日实束,除了在YMD模式中錯誤
19990108 ISO 8601; 任何模式中的1999年1月8日
990108 ISO 8601; 任何模式中的1999年1月8日
1999.008 年和一年中的日子
J2451187 儒略日期
January 8, 99 BC 公元前99年

time

時間類型是time [ (p) ] without time zone和time [ (p) ] with time zone奥秆。 只寫time等效于time without time zone。

db=# create table demo_time(time time);
CREATE TABLE
db=# insert into demo_time values('2020-12-23 12:09:00.000');
INSERT 0 1
db=# select * from demo_time;
   time
----------
 12:09:00
(1 row)

其中p咸灿,表示的毫秒域中的精度构订,其中在timestamp中的p也是一樣的,可以取從0到6的值避矢。

-- 如果p為1鲫咽,則毫秒中顯示的是1個
db=# insert into demo_time_p values('2020-12-21 12:28:00.231');
INSERT 0 1
db=# select * from demo_time_p;
    time
------------
 12:28:00.2
(1 row)

-- 如果p為3,則毫秒中顯示的是3個
db=# create table demo_time_p3(time time(3));
CREATE TABLE
db=# insert into demo_time_p3 values('2020-12-21 12:12:00.213');
INSERT 0 1
db=# select * from demo_time_p3;
     time
--------------
 12:12:00.213
(1 row)

-- 如果p為4谷异,則毫秒中顯示的是4個
db=# create table demo_time_p4(time time(4));
CREATE TABLE
db=# insert into demo_time_p4 values('2020-12-21 12:12:00.21332');
INSERT 0 1
db=# select * from demo_time_p4;
     time
---------------
 12:12:00.2133

time可以輸入的時間類型

04:05:06.789 ISO 8601
04:05:06 ISO 8601
04:05 ISO 8601
040506 ISO 8601
04:05 AM 和04:05一樣分尸,AM并不影響值
04:05 PM 和16:05一樣,輸入的小時必須為 <= 12
04:05:06.789-8 ISO 8601
04:05:06-08:00 ISO 8601
04:05-08:00 ISO 8601
040506-08 ISO 8601
04:05:06 PST 縮寫指定的時區(qū)
2003-04-12 04:05:06 America/New_York 全名指定的時區(qū)

時區(qū)的輸入

可以采用如下

例子 描述
PST 縮寫(太平洋標準時間)
America/New_York 完整時區(qū)名
PST8PDT POSIX風格的時區(qū)聲明
-8:00 PST的ISO-8601偏移
-800 PST的ISO-8601偏移
-8 PST的ISO-8601偏移
zulu UTC的軍方縮寫
z zulu的短形式
db=# create table demo_timestamp_zone(timestamp timestamp with time zone);
CREATE TABLE
db=# insert into demo_time_zone values('12:21:00 PST');
INSERT 0 1
db=# select * from demo_time_zone;
    time
-------------
 12:21:00-08
(1 row)

timetz

其實就是time with time zone歹嘹,用法同上面一樣

timestamp

這個默認就是timestamp without time zone箩绍,就是不帶時區(qū)的時間,在數據庫時區(qū)發(fā)生變化的時候尺上,這個值是不會變化的材蛛,因此要根據自己的情況進行自主的決定

db=# create table demo_timestamp(timestamp timestamp);
CREATE TABLE
db=# insert into demo_timestamp values('2020-12-21 12:12:00.213');
INSERT 0 1
db=# select * from demo_timestamp;
        timestamp
-------------------------
 2020-12-21 12:12:00.213
 
 -- p為2表示精度為2
 db=# create table demo_timestamp_p2(timestamp timestamp(2));
CREATE TABLE
 db=# insert into demo_timestamp_p2 values('2020-12-21 12:12:00.213');
INSERT 0 1
db=# select * from demo_timestamp_p2;
       timestamp
------------------------
 2020-12-21 12:12:00.21

timestamptz

這個默認就是timestamp with time zone,就是帶時區(qū)的時間<br />

interval

表示時間的間隔<br />create table的屬性語法如下

interval [ fields ] [ (p) ]

值的插入時候語法如下

[@] quantity unit [quantity unit...] [direction]

其中unit的

unit是毫秒怎抛、 millisecond卑吭、second、 minute马绝、hour豆赏、day、 week富稻、month掷邦、year、 decade椭赋、century抚岗、millennium 或者縮寫或者這些單位的復數

其中direction可以是ago或者為空,ago對所有域求反哪怔,就是對應的值變成負數

db=# create table demo_interval(interval interval);
CREATE TABLE
db=# insert into demo_interval values('1 day');
INSERT 0 1
db=# select * from demo_interval;
 interval
----------
 1 day
(1 row)
db=# insert into demo_interval values('1 day 1 year');
INSERT 0 1
db=# select * from demo_interval;
   interval
--------------
 1 day
 1 year 1 day
(2 rows)
db=# create table demo_interval(interval interval);
CREATE TABLE
db=# insert into demo_interval values('1 day ago');
INSERT 0 1
db=# select * from demo_interval;
 interval
----------
 -1 days
(1 row)

其中field可以為下面的宣蔚,也就是說下面的就是直接指定了單位了

YEAR
MONTH
DAY
HOUR
MINUTE
SECOND
YEAR TO MONTH
DAY TO HOUR
DAY TO MINUTE
DAY TO SECOND
HOUR TO MINUTE
HOUR TO SECOND
MINUTE TO SECOND

插入時候就不用再指定了,就直接擁有單位了

db=# create table demo_interval_field(interval interval year);
CREATE TABLE
db=# insert into demo_interval_field values('2020');
INSERT 0 1
db=# select * from demo_interval_field;
  interval
------------
 2020 years
(1 row)

時區(qū)對時間的影響

其中timetz和time认境,還有timestamp和timestamptz胚委,的區(qū)別都是時區(qū),那么時區(qū)是怎么影響時間的元暴,其實就是如果數據庫時區(qū)發(fā)生了變化篷扩,帶時區(qū)的數據顯示的時候會變化,而不帶時區(qū)的不會變化茉盏,在一些場景下是需要用到的鉴未,我們這里舉個例子

db=# create table demo_timestamp_z(time1 timestamp, time2 timestamptz);
CREATE TABLE
db=# insert into demo_timestamp_z values (current_timestamp, current_timestamp);
INSERT 0 1
db=# select * from demo_timestamp_z;
           time1            |             time2
----------------------------+-------------------------------
 2020-08-20 08:38:29.813405 | 2020-08-20 08:38:29.813405-07
(1 row)

其中最后的-07表示的就是我們的時區(qū)枢冤,我們查看一下我們的時區(qū)

-- 查看時區(qū)
db=# show timezone;
      TimeZone
---------------------
 America/Los_Angeles
(1 row)

-- 修改時區(qū)
db=# set timezone = 'Asia/Shanghai';
SET

-- 重新查看數據,發(fā)現后面的時區(qū)發(fā)生了變化
db=# select * from demo_timestamp_z;
           time1            |             time2
----------------------------+-------------------------------
 2020-08-20 08:38:29.813405 | 2020-08-20 23:38:29.813405+08
(1 row)

時間類型的展示

風格聲明 描述 例子
ISO ISO 8601, SQL標準 1997-12-17 07:37:16-08
SQL 傳統(tǒng)風格 12/17/1997 07:37:16.00 PST
Postgres 原始風格 Wed Dec 17 07:37:16 1997 PST
German 地區(qū)風格 17.12.1997 07:37:16.00 PST

特殊類型的輸入

對于一些時間铜秆,pg也提供了一些特殊的字符就不用我們直接輸入具體的時間了淹真,比如現在的時間這種,但是只能針對一些特定的類型连茧,如下

輸入串 合法類型 描述
epoch date, timestamp 1970-01-01 00:00:00+00(Unix系統(tǒng)時間0)
infinity date, timestamp 比任何其他時間戳都晚
-infinity date, timestamp 比任何其他時間戳都早
now date, time, timestamp 當前事務的開始時間
today date, timestamp 當日午夜
tomorrow date, timestamp 明日午夜
yesterday date, timestamp 昨日午夜
allballs time 00:00:00.00 UTC
db=# insert into demo_date values('today');
INSERT 0 1
db=# select * from demo_date;
    date
------------
 2020-08-20
(1 row)

db=# insert into demo_date values('tomorrow');
INSERT 0 1
db=# select * from demo_date;
    date
------------
 2020-08-20
 2020-08-21
(2 rows)
db=# insert into demo_date values('yesterday');
INSERT 0 1
db=# select * from demo_date;
    date
------------
 2020-08-20
 2020-08-21
 2020-08-19
(3 rows)

建表的時候的后綴函數

還有就是相關的時間也可以通過一些函數進行插入使用: CURRENT_DATE核蘸、CURRENT_TIME、 CURRENT_TIMESTAMP啸驯、LOCALTIME客扎、 LOCALTIMESTAMP<br />
<br />注意:<br />CURRENT_TIME和CURRENT_TIMESTAMP傳遞帶有時區(qū)的值;LOCALTIME和LOCALTIMESTAMP傳遞的值不帶時區(qū)罚斗。

db=# create table demo_date(date date);
CREATE TABLE
db=# insert into demo_date values(current_date);
INSERT 0 1
db=# select * from demo_date;
    date
------------
 2020-08-20
(1 row)

db=# create table demo_time(time time);
CREATE TABLE
db=# insert into demo_time values(current_time);
INSERT 0 1
db=# select * from demo_time;
      time
----------------
 08:26:32.71908
(1 row)

db=# create table demo_timestamp(timestamp timestamp);
CREATE TABLE
db=# insert into demo_timestamp values(current_timestamp);
INSERT 0 1
db=# select * from demo_timestamp;
         timestamp
----------------------------
 2020-08-20 08:27:33.615135
(1 row)

參考:

官網<br />http://postgres.cn/docs/11/datatype-datetime.html<br />其他<br />https://www.cnblogs.com/personblog/p/11126299.html

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末徙鱼,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子针姿,更是在濱河造成了極大的恐慌袱吆,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,820評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件距淫,死亡現場離奇詭異绞绒,居然都是意外死亡,警方通過查閱死者的電腦和手機榕暇,發(fā)現死者居然都...
    沈念sama閱讀 94,648評論 3 399
  • 文/潘曉璐 我一進店門蓬衡,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人拐揭,你說我怎么就攤上這事撤蟆。” “怎么了堂污?”我有些...
    開封第一講書人閱讀 168,324評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長龄砰。 經常有香客問我盟猖,道長,這世上最難降的妖魔是什么换棚? 我笑而不...
    開封第一講書人閱讀 59,714評論 1 297
  • 正文 為了忘掉前任式镐,我火速辦了婚禮,結果婚禮上固蚤,老公的妹妹穿的比我還像新娘娘汞。我一直安慰自己,他們只是感情好夕玩,可當我...
    茶點故事閱讀 68,724評論 6 397
  • 文/花漫 我一把揭開白布你弦。 她就那樣靜靜地躺著惊豺,像睡著了一般。 火紅的嫁衣襯著肌膚如雪禽作。 梳的紋絲不亂的頭發(fā)上尸昧,一...
    開封第一講書人閱讀 52,328評論 1 310
  • 那天,我揣著相機與錄音旷偿,去河邊找鬼烹俗。 笑死,一個胖子當著我的面吹牛萍程,可吹牛的內容都是我干的幢妄。 我是一名探鬼主播,決...
    沈念sama閱讀 40,897評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼茫负,長吁一口氣:“原來是場噩夢啊……” “哼蕉鸳!你這毒婦竟也來了?” 一聲冷哼從身側響起朽褪,我...
    開封第一講書人閱讀 39,804評論 0 276
  • 序言:老撾萬榮一對情侶失蹤置吓,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后缔赠,有當地人在樹林里發(fā)現了一具尸體衍锚,經...
    沈念sama閱讀 46,345評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,431評論 3 340
  • 正文 我和宋清朗相戀三年嗤堰,在試婚紗的時候發(fā)現自己被綠了戴质。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,561評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡踢匣,死狀恐怖告匠,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情离唬,我是刑警寧澤后专,帶...
    沈念sama閱讀 36,238評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站输莺,受9級特大地震影響戚哎,放射性物質發(fā)生泄漏。R本人自食惡果不足惜嫂用,卻給世界環(huán)境...
    茶點故事閱讀 41,928評論 3 334
  • 文/蒙蒙 一型凳、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧嘱函,春花似錦甘畅、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,417評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蓄氧。三九已至,卻和暖如春荸实,著一層夾襖步出監(jiān)牢的瞬間匀们,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,528評論 1 272
  • 我被黑心中介騙來泰國打工准给, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留泄朴,地道東北人。 一個月前我還...
    沈念sama閱讀 48,983評論 3 376
  • 正文 我出身青樓露氮,卻偏偏與公主長得像祖灰,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子畔规,可洞房花燭夜當晚...
    茶點故事閱讀 45,573評論 2 359

推薦閱讀更多精彩內容