sql – 无法理解隐式地如何将值转换为日期格式
当我检查我的NLS_DATE_FORMAT是DD-MM-RR. 考虑到带有日期列的mytable,当我执行以下语句时,它会抛出错误“ORA-01840:输入值不够长,不适合日期格式”,这是合理可以理解的. insert into mytable values('10'); //Error: reason understandable 那么为什么后面的语句在输入大小大于默认DATE格式大小的情况下有效. insert into mytable values('10AUGUST2016'); //reason not understandable 另外在这里我没有使用任何TO_DATE函数,我猜隐式转换正在发生? 解决方法String-to-Date Conversion Rules允许其他格式规则(不应用任何其他修饰符).所以:> MM也匹配MON和MONTH; 所以: SELECT TO_DATE( '10AUGUST2016','DD-MM-RR' ) FROM DUAL UNION ALL SELECT TO_DATE( '10AUGUST2016','DD-MON-RR' ) FROM DUAL UNION ALL SELECT TO_DATE( '10AUGUST2016','DD-MONTH-RR' ) FROM DUAL UNION ALL SELECT TO_DATE( '10AUG2016','DD-MM-RR' ) FROM DUAL UNION ALL SELECT TO_DATE( '10AUG2016','DD-MON-RR' ) FROM DUAL UNION ALL SELECT TO_DATE( '10AUG2016','DD-MONTH-RR' ) FROM DUAL; 全部生成日期2016-08-10T00:00:00. 您可以使用
然后: SELECT TO_DATE( '10-AUGUST-2016','FXDD-MM-RR' ) FROM DUAL; 给出:ORA-01858:找到一个非数字字符,其中数字是预期的,并且仅匹配找到精确模式匹配的位置(尽管RR仍将匹配RRRR).
是的,oracle隐式使用TO_DATE(’10AUGUST2016′,NLS_DATE_FORMAT)进行转换. 如果您使用: ALTER SESSION SET NLS_DATE_FORMAT = 'FXDD-MM-RR'; 然后你的插入将失败. (编辑:瑞安网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |