2015-03-03 59 views
-1

我试图执行以下查询,但他们给我的错误 -错误在Oracle 11g中的SQL

select projectid, COALESCE(to_char(enddate,dd-mm-yy)-to_char(startdate,dd-mm-yy),startdate) as duration 
From projects; 

在这里,我想显示结束日期和开始日期的差异,如果空则只有startdate.But这是给我错误。 这是无错误

ORA-00904: "YY": invalid identifier 
00904. 00000 - "%s: invalid identifier" 
*Cause:  
*Action: 
Error at Line: 4 Column: 78 

此外,在另一个查询我只想年从startdate。开始日期显示为dd-mm-yy我。怎么办呢?

+3

_'this是给我的错误。 '_ - 为什么很多人发布这样的评论,然后不打扰__发布实际的错误消息_? – 2015-03-03 03:26:18

+0

发布您的错误信息(将其添加到您的问题) – 2015-03-03 03:26:31

+0

错误不是由所示的代码引起的。 – 2015-03-03 03:28:32

回答

3

为什么要将日期转换为字符串,如果你想要区别?你想要的东西,如:

select projectid, (enddate - startdate) as diff 
from projects; 

我不知道你所说的“如果空则只有起始日期”的意思,但coalesce()或许可以解决问题。

编辑:

如果你想同时显示差异(数字)和日期,那么你需要的值转换为字符串:

select projectid, 
     (case when end_date is null then to_char(end_date, 'YYYY-MM-DD') 
      else to_char(end_date - start_date) 
     end) 
from projects; 
+0

是直接使用enddate-startdate工作,但是我在数据库中有一些空值。所以当像这样使用'Collesce'''collesce(enddate -startdate,startdate,enddate)',它给了我错误。 – Coder 2015-03-03 03:29:33

+0

当一个为NULL时,你希望* difference *的值是什么?典型的方法是使用当天的价值。 – 2015-03-03 03:33:01

+0

如果结束日期为'Null',那么差异也将为'Null'。在这种情况下,我想只显示开始日期 – Coder 2015-03-03 03:34:28