select 31/10/2016 as date from dual;
重新调整一个长整数值。
然而,
select '31/10/2016' as date from dual;
给我所需的结果。
当我们给出没有引号的日期值时发生了什么转变?
答案 0 :(得分:3)
不是他们是对的。
第一个是算术运算。
31/10/2016 = ((31 / 10) / 2016) = 3.1 / 2016 = 0.00153...
第二个是字符串
select '31/10/2016' + 1 from dual;
ORA-01722:无效号码
ANSI / ISO日期文字写为
DATE 'YYYY-MM-DD'
在你的情况下
DATE '2016-10-31'
select DATE '2016-10-31' + 1 from dual;
2016-11-01 00:00:00
P.S。
date
是保留字
您无法在不收到解析错误的情况下将其用作列的别名。
答案 1 :(得分:2)
select 31/10/2016
:它的算术运算(分割)
select '31/10/2016'
:使用引号将其变为字符串。单引号分隔字符串常量或日期/时间常量。
答案 2 :(得分:2)
执行时
选择31/10/2016作为双重日期;
甲骨文将其解释为一个分娩的分工操作,将31除以10并再次将2016年结果分开。
执行时
选择' 31/10/2016'作为双重日期;
Oracle将其解释为字符串并且它将抛出错误,因为Date是保留关键字,并且您不能将保留关键字用作列名或别名。
正确的方法如下:
选择to_date(' 31/10 / 2016' dd / mm / yyyy')作为来自双重的dte;