ORA-01861: 文字与格式字符串不匹配

问题分析:
出现此问题时一般都是这个字段跟时间有关,这个错误的意思是当前文本的格式和字段要求的格式不匹配。

第一种可能:
此字段是字符串格式,而你的数据是DATE类型
——这种情况,我们可以改表结构,不过一般不推荐,我们可以用to_char(“数据”,“要转成的格式”)来转成字符串类型。
同样的道理,字符串类型的数据转时间可以用:to_date(“数据”,“字符串数据格式【yyyy-MM-DD HH24:MI:SS】”)转成时间类型的。
ps:当然表结构你可以乱改的,那是最简单粗暴的方法。

第二种可能:
有时当我们确认数据和字段类型是匹配的,那这时候就可能是数据的问题。
例如,当我们使用to_date(“数据”,“格式【yyyy-MM-DD HH24:MI:SS】”)函数时,我们的字符串数据有几个可能不是这种类型的,样例数据:2019-11-27 17:02:333 这样的数据就会导致转化失败。
这时候我们操作这条数据就可以了。
这种情况还是少数,一般更多的是此字段由于没有不允许为空,导致此字段有null的情况,也会导致to_date()函数报错。这样的情况我们可以先对数据进行过滤,可以通过nvl和nvl2函数进行数据的过滤。

以上是我碰到的情况,不一定最全。对了,我用的数据库是oracle

当进行时间的比对时,例如选择之前的数据或者是大与某个时间段的
数据,我们只要保证>或<两边的数据类型一致即可,时间类型或者字符串类型都可以。而且会自动去空,即null的数据。
但< 或>两边先用to_date,to_char函数转化的话,就不会去空了,如果有空就会报上面的错误。

以下是nvl和nvl2的简单说明:

NVL( args1, args2)
功能:如果args1为NULL,则NVL函数返回args2的值,否则返回args1的值,如果两个参数都为NULL ,则返回NULL。

NVL2(args1,args2,args3)
功能:如果参数表达式args1值为NULL,则NVL2()函数返回参数表达式args3的值;如果参数表达式args1值不为NULL,则NVL2()函数返回参数表达式args2的值。

oracle中数据类型都是字符串格式时可以直接比较时间大小

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值