PostgreSQL to_char添加字符到日期

use*_*415 2 sql postgresql jdbc

我想选择以下格式的日期:2018-11-25T16:00:00Z

所以我试图做到这一点:

select to_char(registration_date, 'YYYY-MM-DDTHH24:MI:SSZ')
from ...
Run Code Online (Sandbox Code Playgroud)

但其输出为:

2018-11-01STH24:17:35Z 
Run Code Online (Sandbox Code Playgroud)

字符“ T”更改日期输出,而不是仅在中间打印日期。我试图在char'T'旁边添加空格,如下所示:

选择to_char(registration_date,'YYYY-MM-DDT HH24:MI:SSZ')

它有效,但是我需要没有空格的日期。

如何将char'T'添加到日期中间,输出将与第一个示例相同?

S-M*_*Man 5

是的,那真的很有趣。我可以复制它:

SELECT to_char('2018-11-01 15:21:24'::timestamp, 'YYYY-MM-DDTHH24:MI:SSZ')
Run Code Online (Sandbox Code Playgroud)

2018-11-01STH24:21:24Z  -- note the S
Run Code Online (Sandbox Code Playgroud)

SELECT to_char('2018-11-04 15:21:24'::timestamp, 'YYYY-MM-DDTHH24:MI:SSZ')
Run Code Online (Sandbox Code Playgroud)

2018-11-04THH24:21:24Z -- note that THH still seems to remain as in the format string
Run Code Online (Sandbox Code Playgroud)

这里的问题是格式值TH。该字符串被解释为“序数后缀”。它为“第一”,“第二”,“第三”,“第四”等添加后缀“ ST”,“ ND”,“ RD”和“ TH”。在您的格式字符串中,这是与T和格式字符串组合在一起的HH24

看到:

SELECT to_char('2018-11-01 15:21:24'::timestamp, 'YYYY-MM-DDTH')
Run Code Online (Sandbox Code Playgroud)

2018-11-01ST 
Run Code Online (Sandbox Code Playgroud)

SELECT to_char('2018-11-04 15:21:24'::timestamp, 'YYYY-MM-DDTH')
Run Code Online (Sandbox Code Playgroud)

2018-11-04TH
Run Code Online (Sandbox Code Playgroud)

因此,实际上您的上述示例可以得到解释。的S是在现实ST中,H24是对未解释其余部分THH24(其中TH已经采取了有序后缀)。与第二个示例相同,在该示例中再次TH转换了TH,因此似乎被忽略了。


您的解决方案是将T放在双引号中:

SELECT to_char('2018-11-01 15:21:24'::timestamp, 'YYYY-MM-DD"T"HH24:MI:SSZ')
Run Code Online (Sandbox Code Playgroud)

这使:

2018-11-01T15:21:24Z
Run Code Online (Sandbox Code Playgroud)

demo:db <>小提琴

Postgres日期格式