对于Oracle来说,我是一个初学者。我无法弄清楚如何做类似的事情:
SELECT ID, NAME, TO_CHAR(DATEBIRTH, 'DD/MM/YYYY HH24:MI:SS')
FROM PEOPLE WHERE DATEBIRTH >= ANOTHERDATE - NDAY
简而言之,我想选择在特定日期和时间之前N天出生的所有人,但我不太确定这是做到这一点的方式,也不会给我预期的结果。< / p>
PS:我正在oracle8i下开发。
答案 0 :(得分:4)
您的查询对我来说是正确的。这就是你从Oracle中的日期中减去天数的方法。如果您想要添加数月或数年,此链接可为您提供更多洞察力:
http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:1157035034361
答案 1 :(得分:3)
您可能需要考虑日期的时间部分“ANOTHERDATE”。
如果您只关心整天,那么您可以将查询重写为:
SELECT ID, NAME, TO_CHAR(DATEBIRTH, 'DD/MM/YYYY HH24:MI:SS')
FROM PEOPLE
WHERE DATEBIRTH >= TRUNC(ANOTHERDATE - NDAY)
N.B。这是假设“NDAY”是数字。
“简而言之,我想选择在特定日期和时间之前N天出生的所有人,但我不太确定这是做到这一点的方式,也不会给我我期望的结果。 “
我的第一个查询会让所有人在“ANOTHERDATE”之前有一个生日 ON OR AFTER “NDAY”天。
这将为所有在“ANOTHERDATE”之前的“NDAY”日举行生日 ON 的人提供:
SELECT id,
name,
TO_CHAR(datebirth, 'DD/MM/YYYY HH24:MI:SS') AS birth_date
FROM people
WHERE TRUNC(datebirth) = TRUNC(anotherdate - NDAY);
如果“datebirth”列上有索引,那么你不想用TRUNC包装它,所以你可以使用以下能够使用“datebirth”的任何索引:
SELECT id,
name,
TO_CHAR(datebirth, 'DD/MM/YYYY HH24:MI:SS') AS birth_date
FROM people
WHERE datebirth >= TRUNC(anotherdate - NDAY)
AND datebirth < (TRUNC(anotherdate - NDAY) + 1);
答案 2 :(得分:0)
你必须明确地将(anotherdate)转换为date,然后从中减去(ndays):
SELECT ID, NAME, TO_CHAR(DATEBIRTH, 'DD/MM/YYYY HH24:MI:SS')
FROM PEOPLE
WHERE DATEBIRTH >= TO_DATE(ANOTHERDATE) - NDAY
答案 3 :(得分:-2)
以下查询从给定日期减去n天
select to_date('date') - 'n days'
from dual
示例:
select TO_DATE('02-Jul-16') - 90
from dual