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'; 然后你的插入将失败. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- sqlserver2008中个字段的详细注解
- sql-server – 如何在sql server中的分隔符之前获取第一个值
- SQL Server用T—SQL命令查询一个数据库中有哪些表的sql语句
- sql-azure – Azure SQL数据库定价是每个数据库服务器或每个
- 数据库 – 动态或列化的tsvector索引?
- SQLSERVER 清除历史记录的方法
- sql-server – 确定每个月的第3个星期五
- mssqlserver分页2种方法,很多人都选择了最差的一种
- WPF网格:如果我需要插入新行,是否有一种简单的方法来重新调
- sql-server – FOR XML无法序列化数据,因为它包含字符(0x00