最新最全 Oracle ORA-01861: 文字与格式字符串不匹配

接上篇,上一篇讲到,要将oracle表中已经存放的时间查询出来后再加8小时.然后再来使用所得到的结果.当时测试可行

但是第二天打开数据库再一执行,就会发现数据库报错,昨天可以完美执行的语句,今天就是一条报错的语句了.
TO_date(P.createdate,‘YYYY-MM-DD hh24:mi:ss’)+numtodsinterval(8,‘hour’)
在这里插入图片描述

What happened?
没办法,只能百度.最终找到一篇文章以解决此问题.
请往这里看:https://blog.csdn.net/qq_36798713/article/details/91044461
当然,我的情况与这篇作者的情况又有所不同.
原因很简单,前者是insert.而我是select.
我的表中存放时间的字段:createdate 数据类型为:DATE
TO_char(P.createdate,‘YYYY-MM-DD hh24:mi:ss’)+numtodsinterval(8,‘hour’)
此时会报错:ORA-30081: 对日期时间/间隔算法无效的数据类型
在这里插入图片描述

这样也不对,因为我如果直接将 P.createdate 做to_char处理的话,那么后面的操作就没有意义了.显然是一个很低级的错误.
继续修改语句:TO_char((P.createdate+numtodsinterval(8,‘hour’)),‘YYYY-MM-DD hh24:mi:ss’)
OK!查出结果了!

总结时刻.

这里倒叙分析问题
1.为什么 TO_char((P.createdate+numtodsinterval(8,‘hour’)),‘YYYY-MM-DD hh24:mi:ss’) 执行OK?
答,因为P.createdate本身即为 DATE 类型,所以第一次写的 TO_date(P.createdate,‘YYYY-MM-DD hh24:mi:ss’)+numtodsinterval(8,‘hour’)是不正确的,(这个地方也不能说是不正确,但是我自己目前还没搞明白,之所以说这个地方也是正确的原因继续浏览)
2.犯了很低级的错误 TO_char(P.createdate,‘YYYY-MM-DD hh24:mi:ss’)+numtodsinterval(8,‘hour’) 一个是char,一个是date怎么可能相加呢?(手动脸红)之所以写出来,也是为了提醒刚接触编程的朋友,基础一定要扎实!
3.在总结1中提到"TO_date(P.createdate,‘YYYY-MM-DD hh24:mi:ss’)+numtodsinterval(8,‘hour’)“也是正确的,也是错误的原因呢,其实是有一个前提条件的.
首先,在昨天第一次写出这条语句的时候,我这样写是可以查出来结果的.但是同样的语句,今天再执行就会报错.所以说这种写法既是对的,同时也是错的.
那么这个前提条件是什么呢?
不知道新手朋友对这条语句是否熟悉:
alter session set nls_date_format=‘YYYY/MM/DD HH24:MI:SS’;
这是修改oracle session的.作用是将时间格式修改为指定的日期格式:“YYYY/MM/DD HH24:MI:SS”,同时,我的oracle默认的日期格式是"14-10月-20”
而昨天,我执行"TO_date(P.createdate,‘YYYY-MM-DD hh24:mi:ss’)+numtodsinterval(8,‘hour’)"这种写法时,是因为在这之前.我修该了oracle的session.
但是今天再执行同样的语句之前我没有执行修改session的语句,所以昨天执行OK的语句今天就报错了.
这就是刚才提到的前提条件,但是至于为什么会这样,截止到文章发布,我还没有搞明白为什么.如果有知道原因的朋友还请不吝赐教.
如果我搞明白了原因,也会及时更新.
贴出来,对自己是笔记,对第一次遇到的朋友是帮助.
共同学习,共同进步吧!加油!!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
这个错误通常发生在尝试将一个不匹配日期格式字符串转换为日期类型时。例如,当你使用TO_DATE函数时,指定的日期字符串与给定的日期格式不匹配时,就会出现ORA-01861错误。 要解决这个问题,你需要确保提供的日期字符串与指定的日期格式完全匹配。以下是一些常见的解决方法: 1. 检查日期字符串和日期格式是否匹配。确保日期字符串格式与你指定的日期格式相匹配。例如,如果你使用了'YYYY-MM-DD'格式,那么你的日期字符串也应该是以相同的格式提供。 2. 如果你使用了特殊字符,如斜杠(/),确保在日期字符串中正确地包含它们。例如,如果你的日期格式是'MM/DD/YYYY',那么你的日期字符串应该包含正确的斜杠。 3. 如果你使用了时间部分,并且希望匹配到具体的小时、分钟和秒,请确保日期字符串中包含正确的时间值。例如,如果你的日期格式是'YYYY-MM-DD HH24:MI:SS',那么你的日期字符串应该包含正确的时间值,如'2021-01-01 09:30:00'。 4. 如果你使用了非固定长度的月份或日期,例如使用'MON'表示月份,请确保日期字符串中使用了正确的月份缩写。 5. 如果你使用了非固定长度的年份,请确保日期字符串中使用了正确的年份格式。例如,如果你使用了'YY'表示年份的后两位数,那么你的日期字符串中应该使用正确的后两位数。 通过检查这些方面,你应该能够解决ORA-01861错误。如果问题仍然存在,可以提供更多的代码和报错上下文,以便更好地理解并提供帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值