我从表中提取一些数据,其中一列是日期。我想要做的是在结果中添加另一列,该列将是对该日期进行计算的结果:
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
。
答案 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;