[英]casting string to date postgresql
使用 postgres 14
我有一個類似於 2011-04-26T05:04:11Z 的時間戳。 在 UTC 時間,我嘗試使用此 function 將其轉換為 postgres 時間戳,但我得到了錯誤的結果 2022-04-26 00:04:11-07。 時間部分似乎搞砸了。
這是我的查詢
select to_TIMESTAMP('2011-04-26T05:04:11Z','YYYY-MM-DDTHH:MI:SS')
如果您只想將字符串轉換為 Postgres 時間戳,則:
select '2011-04-26T05:04:11Z'::timestamptz;
04/25/2011 22:04:11 PDT
output 將取決於 DateStyle 設置。
然后讓你的例子工作:
select to_TIMESTAMP('2011-04-26T5:04:11Z','YYYY-MM-DD"T"HH24:MI:SS');
to_timestamp
-------------------------
04/26/2011 05:04:11 PDT
請注意"T"
,這會導致它被忽略,因為這似乎是導致問題的原因。 不確定,但可能與使用空格而不是T
的 Postgres ISO 格式有關。 要忽略的引用字符來自Formatting function :
提示
在 PostgreSQL 12 之前,可以使用非字母或非數字字符跳過輸入字符串中的任意文本。 例如,to_timestamp('2000y6m1d', 'yyyy-MM-DD') 曾經有效。 現在您只能為此目的使用字母字符。 例如,to_timestamp('2000y6m1d', 'yyyytMMtDDt') 和 to_timestamp('2000y6m1d', 'yyyy"y"MM"m"DD"d"') 跳過 y、m 和 d。
to_timestamp
中沒有提供時區縮寫,因此Z
將被忽略,時間戳將采用具有相同時間值的本地時間。 這就是為什么我使用timestamptz
cast 提出我的第一個建議。
處理時區的兩種方式:
一:
select to_TIMESTAMP('2011-04-26T5:04:11Z','YYYY-MM-DD"T"HH24:MI:SS')::timestamp AT time zone 'UTC';
timezone
-------------------------
04/25/2011 22:04:11 PDT
二:
select to_TIMESTAMP('2011-04-26T5:04:11+00','YYYY-MM-DD"T"HH24:MI:SS+TZH');
to_timestamp
-------------------------
04/25/2011 22:04:11 PDT
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.