鍍金池/ 問(wèn)答/PHP  數(shù)據(jù)庫(kù)/ postgresql timestamp該如何使用

postgresql timestamp該如何使用

1,postgresql timestamp在表中的原始數(shù)據(jù)是數(shù)值還是格式化好的時(shí)間字符串?
2,如果是格式化的字符串,那他自己排序是不是性能很差?
3,如果是數(shù)值,可否直接按照數(shù)值查出來(lái)呢?

回答
編輯回答
故人嘆
  1. TIMESTAMP類型在表中存儲(chǔ)的內(nèi)部形式是一個(gè)8字節(jié)數(shù)值, 可表示的時(shí)間范圍是 公元前4713年~公元294276年,最小單位是微妙(microsecond)
  2. 因?yàn)槭菙?shù)值,所以你不用擔(dān)心其排序性能
  3. 這個(gè)問(wèn)題比較復(fù)雜

    TIMESTAMP類型雖然是一個(gè)8字節(jié)數(shù)值,但是為了向用戶屏蔽內(nèi)部細(xì)節(jié),它的輸出都是以字符串的形式來(lái)輸出時(shí)間戳的(時(shí)間戳的格式可以指定)。從道理上,PG社區(qū)并不希望直接把內(nèi)部數(shù)值暴露到外部。

    如果非要以數(shù)值類型查出來(lái),目前好像也沒(méi)有辦法能夠查到其原始的8字節(jié)數(shù)值,但是可以通過(guò)下述方法"曲線救國(guó)" —— 即把TIMESTAMP類型轉(zhuǎn)換為Unix時(shí)間戳(1970 年 1 月 1 日(00:00:00 GMT)以來(lái))后以整型顯示:

    假設(shè)有下面一張表

    CREATE TABLE foobar (col1 INTEGER, col2 TIMESTAMP);

    那么想以所謂的數(shù)值形式查詢col2的值的SQL語(yǔ)句如下:

    SELECT CAST(EXTRACT(EPOCH FROM col2) AS INTEGER) FROM foobar;

    關(guān)于EPOCH的用法可以參照手冊(cè)9.9. Date/Time Functions and Operators

2018年7月15日 15:05
編輯回答
鹿惑

PostgreSQL 提供 timestamp 數(shù)據(jù)類型。

https://www.postgresql.org/do...

所以不要以字符串或者整數(shù)存儲(chǔ) timestamp 數(shù)據(jù),會(huì)帶來(lái)存儲(chǔ)和查詢性能上的代價(jià)。

2017年2月19日 21:08