TO_DATE 中最后一个 .0 的 oracle 格式是啥('2020-04-01 00:00:00.0','YYYY-MM-DD HH24:MI:SS.TZR')?
Posted
技术标签:
【中文标题】TO_DATE 中最后一个 .0 的 oracle 格式是啥(\'2020-04-01 00:00:00.0\',\'YYYY-MM-DD HH24:MI:SS.TZR\')?【英文标题】:What is oracle format for last .0 in TO_DATE ('2020-04-01 00:00:00.0','YYYY-MM-DD HH24:MI:SS.TZR')?TO_DATE 中最后一个 .0 的 oracle 格式是什么('2020-04-01 00:00:00.0','YYYY-MM-DD HH24:MI:SS.TZR')? 【发布时间】:2020-07-26 21:52:56 【问题描述】:我从 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 - “格式代码不能出现在日期输入格式中”
【问题讨论】:
DATE 数据类型没有小数秒和时区,您需要使用 TIMESTAMP。为了简单起见,您可以使用使用固定格式的 ANSI 文字。请参阅日期时间文字文档docs.oracle.com/database/121/SQLRF/… 看来你有一个java.sql.Timestamp
并应用了它的toString
方法。 Timestamp
类的设计很差而且已经过时了,所以首先看看你是否可以得到一个Instant
、OffsetDateTime
或LocalDateTime
。接下来将其中一个发送到您的数据库而不是字符串,这样您就不需要在 SQL 端进行任何转换。
正如我已经说过的,.0 是小数秒部分。阅读我上面提供的文档链接。 DATE 不能超过秒,TIMESTAMP 可以存储小数秒和时区值。
@fatherazrael 那行得通。但是,如果您从 Java 应用程序本身获取它作为 DATE 或 TIMESTAMP 会比在 SQL 中操作文字更好。
"我从 Java 得到这个日期并且是日期类型。" - 你应该通过java.time.LocalDateTime
(或至少java.sql.Timestamp
)检索和存储 DATE 值不作为字符串。
【参考方案1】:
.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 数据类型的评论。
【讨论】:
【参考方案2】:这种格式可以通过之前的类型信息轻松转换
从 DUAL 中选择时间戳'2020-04-01 01:02:03.4'
和to_timestamp也可以用在select stmt中。
【讨论】:
以上是关于TO_DATE 中最后一个 .0 的 oracle 格式是啥('2020-04-01 00:00:00.0','YYYY-MM-DD HH24:MI:SS.TZR')?的主要内容,如果未能解决你的问题,请参考以下文章
mybaties 和 oracle的to_date函数的问题