Oracle:select中的嵌套查询(比较日期)

时间:2016-03-25 15:58:08

标签: sql oracle date

我从表中提取一些数据,其中一列是日期。我想要做的是在结果中添加另一列,该列将是对该日期进行计算的结果:

select dateX, (select dateX - CURRENT_DATE from dual)
from TableX

问题是如何将dateX列传递给我选择的嵌套?我知道我说的方式是错误的,因为dateX并不存在于dual表中。

谢谢

编辑#1

实际上,这是我的疑问:

 SELECT DISTINCT 
        id,site,TO_CHAR(dateX,'RRRR-MM-DD') startDate, (      
with test(d) as ( select TO_DATE(dateX, 'RRRR-MM-DD') from dual)
select case 
       when trunc(d) = trunc(sysdate) then 'PRESENT'
       when trunc(d) > trunc(sysdate) then 'FUTURE'
       when trunc(d) < trunc(sysdate) then 'PAST'
       end
from test
 ) startdateCompare
FROM 
        TableX 
WHERE 
        id = 6502 

startdateCompare应包含取决于日期dateX的值。

当我执行它时,我得到:dateX : invalid identifier

2 个答案:

答案 0 :(得分:1)

假设dateX的类型为DATE,则不需要在其上调用TO_DATE(在内部查询中)。你甚至可能得到错误的答案。 TO_DATE需要一个字符变量。你给它dateX,所以Oracle会使用你的NLS设置将它转换为字符,这可能不是'RRRR-MM-DD' - 如果不是,你可能会在TO_DATE尝试将其转换回a时遇到错误日期为'RRRR-MM-DD'格式。

您的查询不需要子查询。它应该是:

SELECT DISTINCT
   id, site, TO_CHAR(dateX, 'RRRR-MM-DD') startDate,
       case when trunc(dateX) = trunc(sysdate) then 'PRESENT'
            when trunc(dateX) > trunc(sysdate) then 'FUTURE'
            when trunc(dateX) < trunc(sysdate) then 'PAST'
       end  startdateCompare
FROM  (etc.)

最好,算术

答案 1 :(得分:0)

您的代码实际工作。 dateX的值将来自外部查询。

编写它的简单方法是:

select dateX, (dateX - CURRENT_DATE) as newcol
from TableX;