TO_DATE ('2020-04-01 00:00:00.0','YYYY-MM-DD HH24:MI:SS.TZR') 中最后一个 .0 的 oracle 格式是什么?

What is oracle format for last .0 in TO_DATE ('2020-04-01 00:00:00.0','YYYY-MM-DD HH24:MI:SS.TZR')?

我从 Java 得到这个日期并且是日期类型。

所以尝试在 oracle 中格式化它

select TO_DATE ('2020-04-01 00:00:00.0','YYYY-MM-DD HH24:MI:SS.TZR') from DUAL

无法格式化最后一个 .0 日期。尝试了各种方式

.TZR
  TZR

不确定如何设置格式?如果我删除 .0 和 .TZR 那么一切正常。

我收到以下错误:

ORA-01820: format code cannot appear in date input format 01820. 00000 - "format code cannot appear in date input format"

.0是小数秒,不是时区偏移;但是日期数据类型无论如何都不允许。

如果您的字符串总是有 .0 那么您可以将其视为固定字符以忽略它:

select TO_DATE ('2020-04-01 00:00:00.0','YYYY-MM-DD HH24:MI:SS".0"') from DUAL;

TO_DATE('2020-04-01
-------------------
2020-04-01 00:00:00

如果它可能不为零,或者如果您愿意,它可以转换为时间戳,然后将其转换为日期:

select CAST( TO_TIMESTAMP ('2020-04-01 00:00:00.0','YYYY-MM-DD HH24:MI:SS.FF') AS DATE) from DUAL;

CAST(TO_TIMESTAMP('
-------------------
2020-04-01 00:00:00

FF格式模型元素表示小数秒,as the documentation says,即"Valid in timestamp and interval formats, but not in DATE formats"。

从 Java 获取值意味着什么并不完全清楚,但是如果您正在调用 JDBC 并将参数作为字符串传递,您应该退后一步并使用正确的 JDBC 数据类型。如果可以的话,还要注意@Ole 关于使用现代 Java 数据类型的评论。

这种格式可以通过之前的类型信息轻松转换

SELECT timestamp'2020-04-01 01:02:03.4' from DUAL

to_timestamp也可以用在selectstmt.