我想选择以下格式的日期: 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',输出将与第一个示例相同?
答案 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
实际上是ST
,H24
是THH24
的其余部分(其中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