日期值返回随机整数 - oracle

时间:2017-02-09 07:40:26

标签: sql oracle11g

select 31/10/2016 as date from dual;

重新调整一个长整数值。

然而,

select '31/10/2016' as date from dual;

给我所需的结果。

当我们给出没有引号的日期值时发生了什么转变?

3 个答案:

答案 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'

Datetime Literals

在你的情况下

DATE '2016-10-31'
select DATE '2016-10-31' + 1 from dual;
  

2016-11-01 00:00:00

P.S。
date是保留字 您无法在不收到解析错误的情况下将其用作列的别名。

B Oracle Reserved Words, Keywords, and Namespaces

答案 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;