簡體   English   中英

到目前為止鑄造字符串 postgresql

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM