PostgreSQL to_char添加字符到日期

时间:2018-11-04 14:53:18

标签: sql postgresql jdbc

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

所以我尝试这样做:

select to_char(registration_date, 'YYYY-MM-DDTHH24:MI:SSZ')
from ...

但其输出是:

2018-11-01STH24:17:35Z 

字符'T'更改日期输出,而不只是在中间打印。我试图像这样在字符'T'旁边添加空间:

选择to_char(注册日期,'YYYY-MM-DDT HH24:MI:SSZ')

它可以工作,但是我需要没有空格的日期。

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

1 个答案:

答案 0 :(得分:4)

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

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

给予

2018-11-01STH24:21:24Z  -- note the S

还有

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

给予

2018-11-04THH24:21:24Z -- note that THH still seems to remain as in the format string

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

请参阅:

SELECT to_char('2018-11-01 15:21:24'::timestamp, 'YYYY-MM-DDTH')

给予

2018-11-01ST 

SELECT to_char('2018-11-04 15:21:24'::timestamp, 'YYYY-MM-DDTH')

给予

2018-11-04TH

因此,实际上您的上述示例可以得到解释。 S实际上是STH24THH24的其余部分(其中TH已经用作序数后缀)。与第二个示例相同,在该示例中,TH再次转换为TH,因此似乎被忽略了。


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

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

给出:

2018-11-01T15:21:24Z

demo:db<>fiddle

Postgres date formatting