当谈到 Oracle 时,我是一个初学者。我无法弄清楚如何做类似的事情:
SELECT ID, NAME, TO_CHAR(DATEBIRTH, 'DD/MM/YYYY HH24:MI:SS')
FROM PEOPLE WHERE DATEBIRTH >= ANOTHERDATE - NDAY
简而言之,我想选择在特定日期和时间前 N 天出生的每个人,但我不太确定这是这样做的方法,也不会给我带来预期的结果。
PS:我在oracle8i下开发。
当谈到 Oracle 时,我是一个初学者。我无法弄清楚如何做类似的事情:
SELECT ID, NAME, TO_CHAR(DATEBIRTH, 'DD/MM/YYYY HH24:MI:SS')
FROM PEOPLE WHERE DATEBIRTH >= ANOTHERDATE - NDAY
简而言之,我想选择在特定日期和时间前 N 天出生的每个人,但我不太确定这是这样做的方法,也不会给我带来预期的结果。
PS:我在oracle8i下开发。
您的查询对我来说是正确的。这就是在 Oracle 中从日期中减去天数的方式。如果您想添加数月或数年,此链接可为您提供更多见解:
http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:1157035034361
您可能需要考虑日期“ANOTHERDATE”的时间部分。
如果您只关心一整天,那么您可以将查询重写为:
SELECT ID, NAME, TO_CHAR(DATEBIRTH, 'DD/MM/YYYY HH24:MI:SS')
FROM PEOPLE
WHERE DATEBIRTH >= TRUNC(ANOTHERDATE - NDAY)
注意这是假设“NDAY”是一个数字。
“简而言之,我想选择在特定日期和时间前 N 天出生的每个人,但我不太确定这是这样做的方法,也不会给我带来预期的结果。”
我的第一个查询会在“ANOTHERDATE”之前的“NDAY”天或“NDAY”天之后为您提供生日。
这将为您在“ANOTHERDATE”前“ NDAY ”天生日的每个人提供:
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);
您必须将 (anotherdate) 显式转换为日期,然后从中减去 (ndays):
SELECT ID, NAME, TO_CHAR(DATEBIRTH, 'DD/MM/YYYY HH24:MI:SS')
FROM PEOPLE
WHERE DATEBIRTH >= TO_DATE(ANOTHERDATE) - NDAY
下面的查询从给定日期减去 n 天
select to_date('date') - 'n days'
from dual
例子:
select TO_DATE('02-Jul-16') - 90
from dual