postgreSQL 使用timestamp轉成date格式
阿新 • • 發佈:2021-01-11
嘗試了以下兩種方式,將pg中的timestamp格式轉換成date格式:
方式一:
select to_date( to_char( f.begin_time,'yyyy-mm-dd' ),'yyyy-mm-dd' ) from hafd f
方式二:
select f.begin_time::DATE from hafd f
大概比較了一下,9萬條測試資料,方式二的效能更好!
補充:PostgreSQL中的時間戳格式轉化常識
前提:當資料庫中儲存的是timestamp型別時,我們需要通過這個時間戳來做樂觀資料鎖,那麼久需要Select出來,然後在更新的時候在Update的where條件中判斷時間戳是否與查詢時相同。
下面的SQL文查詢結果是 "2018-08-20 10:09:10.815125",並且返回型別可以當String處理。返回json等都方便使用。
SQL> select to_char(updateTime,'yyyy-mm-dd hh24:mi:ss.us') from tbl_A;
更新時,引數傳入“2018-08-20 10:09:10.815125”的字串,那麼需要在SQL中轉化來匹配updateTime欄位的timeStamp資料型別。
SQL> update tbl_A set username='XXX' where userid='001' and updateTime = to_timestamp('2018-08-20 10:09:10.815125','yyyy-mm-dd hh24:mi:ss.us');
另附表一張
函式 | 返回型別 | 描述 | 例子 |
to_char(timestamp,text) | text | 把時間戳轉換成字串 | to_char(current_timestamp,'HH12:MI:SS') |
to_char(interval,text) | text | 把時間間隔轉為字串 | to_char(interval '15h 2m 12s','HH24:MI:SS') |
to_char(int,text) | text | 把整數轉換成字串 | to_char(125,'999') |
to_char(double precision,text) | text | 把實數/雙精度數轉換成字串 | to_char(125.8::real,'999D9') |
to_char(numeric,text) | text | 把numeric轉換成字串 | to_char(-125.8,'999D99S') |
to_date(text,text) | date | 把字串轉換成日期 | to_date('05 Dec 2000','DD Mon YYYY') |
to_timestamp(text,text) | timestamp | 把字串轉換成時間戳 | to_timestamp('05 Dec 2000','DD Mon YYYY') |
to_timestamp(double) | timestamp | 把UNIX紀元轉換成時間戳 | to_timestamp(200120400) |
to_number(text,text) | numeric | 把字串轉換成numeric | to_number('12,454.8-','99G999D9S') |
模式 | 描述 |
HH | 一天的小時數(01-12) |
HH12 | 一天的小時數(01-12) |
HH24 | 一天的小時數(00-23) |
MI | 分鐘(00-59) |
SS | 秒(00-59) |
MS | 毫秒(000-999) |
US | 微秒(000000-999999) |
AM | 正午標識(大寫) |
Y,YYY | 帶逗號的年(4和更多位) |
YYYY | 年(4和更多位) |
YYY | 年的後三位 |
YY | 年的後兩位 |
Y | 年的最後一位 |
MONTH | 全長大寫月份名(空白填充為9字元) |
Month | 全長混合大小寫月份名(空白填充為9字元) |
month | 全長小寫月份名(空白填充為9字元) |
MON | 大寫縮寫月份名(3字元) |
Mon | 縮寫混合大小寫月份名(3字元) |
mon | 小寫縮寫月份名(3字元) |
MM | 月份號(01-12) |
DAY | 全長大寫日期名(空白填充為9字元) |
Day | 全長混合大小寫日期名(空白填充為9字元) |
day | 全長小寫日期名(空白填充為9字元) |
DY | 縮寫大寫日期名(3字元) |
Dy | 縮寫混合大小寫日期名(3字元) |
dy | 縮寫小寫日期名(3字元) |
DDD | 一年裡的日子(001-366) |
DD | 一個月裡的日子(01-31) |
D | 一週裡的日子(1-7;週日是1) |
W | 一個月裡的週數(1-5)(第一週從該月第一天開始) |
WW | 一年裡的週數(1-53)(第一週從該年的第一天開始) |
以上為個人經驗,希望能給大家一個參考,也希望大家多多支援我們。如有錯誤或未考慮完全的地方,望不吝賜教。