我从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:格式代码不能以日期输入格式出现
  01820。00000-“格式代码无法以日期输入格式出现”

最佳答案

.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,即“在时间戳和间隔格式中有效,但在DATE格式中无效”。

从Java中获取值的含义并不完全是束缚,但是,如果要进行JDBC调用并将参数作为字符串传递,则应退后一步,而是使用适当的JDBC数据类型。如果可以的话,还请注意@Ole关于使用现代Java数据类型的评论。

10-04 11:17
查看更多