Postgresql to_char 将字符添加到日期
Posted
技术标签:
【中文标题】Postgresql to_char 将字符添加到日期【英文标题】:Postgresql to_char add characters to date 【发布时间】:2018-11-04 14:53:17 【问题描述】:我想选择这种格式的日期: 2018-11-25T16:00:00Z
所以我尝试这样做:
select to_char(registration_date, 'YYYY-MM-DDTHH24:MI:SSZ')
from ...
但它的输出是:
2018-11-01STH24:17:35Z
char 'T' 改变了日期输出,而不是仅仅在中间打印。我试图像这样在字符“T”旁边添加空格:
select to_char(registration_date, 'YYYY-MM-DDT HH24:MI:SSZ')
它有效,但我需要不带空格的日期。
如何将字符'T'添加到日期的中间,并且输出与第一个示例相同?
【问题讨论】:
【参考方案1】:是的,这真的很有趣。我可以重现它:
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
demo:db<>fiddle
Postgres date formatting
【讨论】:
以上是关于Postgresql to_char 将字符添加到日期的主要内容,如果未能解决你的问题,请参考以下文章
Postgresql/Greenplum中将数字转换为字符串TO_CHAR函数前面会多出一个空格