postgresql Postgres-必须to_timestamp()忽略/不读取日期/时间字符串中间的特定字符

vnjpjtjt  于 2023-02-04  发布在  PostgreSQL
关注(0)|答案(2)|浏览(301)

我有一个原始文本列,其值为'2012 - 07 - 26T10:33:34'和'2012 - 07 - 26T10:56:16'。在Java中使用Joda-Time,我可以通过调用
new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss").
在Postgres中,我如何忽略中间的"T"字符?
我已经尝试了'YYYY-MM-DD\THH:mm:ss',但得到错误

  • 〉错误:无法找到从未知到文本的转换函数 *
vsdwdz23

vsdwdz231#

如果我没弄错的话,ANSI的ANSI时间戳文本中允许T,所以下面的代码应该可以工作。

select timestamp '2012-07-26T10:33:34';

您说您有一个文本列,因此您可能需要类似于以下内容的内容:

create table foo (ts text);
insert into foo values ('2012-07-26T10:33:34')
select cast(ts as timestamp)
from foo;

这同样适用:

select to_timestamp(ts, 'yyyy-mm-dd hh24:mi:ss')
from foo;

SQLFiddle示例:http://sqlfiddle.com/#!12/0b369/1

dgtucam1

dgtucam12#

如前所述,CAST解决方案确实有效

SELECT CAST('2012-07-26T10:33:34' AS TIMESTAMP);

      timestamp
---------------------
 2012-07-26 10:33:34

但是TO_TIMESTAMP只有一个空格 * 或者 * 一个T

不起作用

SELECT TO_TIMESTAMP('2012-07-26T10:33:34', 'YYYY-MM-DD HH24:MI:SS');

ERROR:  invalid value "T1" for "HH24"
DETAIL:  Value must be an integer.

使用T也不会这样做

SELECT TO_TIMESTAMP('2012-07-26T10:33:34', 'YYYY-MM-DDTHH24:MI:SS');

      to_timestamp
------------------------
 2012-07-26 00:03:34+10

但令人惊讶的是使用小写hh24和大写T

有效

SELECT TO_TIMESTAMP('2012-07-26T10:33:34', 'YYYY-MM-DDThh24:MI:SS');

      to_timestamp
------------------------
 2012-07-26 10:33:34+10

相关问题