故障004:非法的时间日期类型数据


DM技术交流QQ群:940124259

1. 问题描述

某单位某开发人员信息call我,日期转换函数咋报错(非法的时间日期类型数据)呢。指导他一顿操作猛如虎,终解惑也。
如下报错截图:

在这里插入图片描述


2. 解决方法

步骤1:检查报错端的数据库版本

select id_code;

在这里插入图片描述

步骤2:对比自己的数据库版本和运行结果

select id_code, to_date('2020-03-04 12:00:05', 'YYYY-MM-DD');

/*
so beautiful! so unbelievable!
老版本如此美好,如此美妙。新版本令人难以置信。
*/

在这里插入图片描述

步骤3:查阅时间类兼容参数

select * from v$dm_ini where para_name like '%DATE%TIME%';

/*
very nice!
好家伙,新版本多了一个新参数'DATETIME_FAST_RESTRICT'
仔细阅读参数含义,获知,
DATETIME_FAST_RESTRICT=0 表示字符串可以带时间。
DATETIME_FAST_RESTRICT=1 表示字符串不允许带时间,带时间会报错。

针对两种场景起作用:
1. TO_DATE(字符串, FAST格式)函数转换。
2. alter session set nls_date=<FAST格式>,再使用cast(字符串 as date)函数转换。
所谓的FAST格式:  YYYY-MM-DD  或   YYYY/MM/DD  或 YYYY:MM:DD  或  YYYY.MM.DD   


话音刚落,这不就是恰逢第一种场景to_date函数,第一个参数中字符串多带时间描述,
第二个参数日期时间解析格式少了时间(满足FAST范式),又因DATETIME_FAST_RESTRICT=1参数意思
不准带时间字符串指定,故报错。剩下解决的办法来咯,见步骤4.
*/

在这里插入图片描述

步骤4:对症下药设参

call sp_set_para_value(1, 'DATETIME_FAST_RESTRICT', 0); -- 向开发人员确认,已解决,here it is.

/*
结论:
 1. 新旧版本最好先对比下结果,联想参数是否新增。
 2. 本人验证1-190 (2021年3月)以后的新版本(更细的版本,当时手里没有,在此论个大概),增加DATETIME_FAST_RESTRICT兼容参数,请大家注意。
 3. 新版本增加这个参数,大家不要觉得很low,这也代表数据库越来越严谨。
*/
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值