7

当谈到 Oracle 时,我是一个初学者。我无法弄清楚如何做类似的事情:

SELECT ID, NAME, TO_CHAR(DATEBIRTH, 'DD/MM/YYYY HH24:MI:SS') 
FROM PEOPLE WHERE DATEBIRTH >= ANOTHERDATE - NDAY

简而言之,我想选择在特定日期和时间前 N 天出生的每个人,但我不太确定这是这样做的方法,也不会给我带来预期的结果。

PS:我在oracle8i下开发。

4

4 回答 4

5

您的查询对我来说是正确的。这就是在 Oracle 中从日期中减去天数的方式。如果您想添加数月或数年,此链接可为您提供更多见解:

http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:1157035034361

于 2011-09-07T15:24:36.610 回答
3

您可能需要考虑日期“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);
于 2011-09-07T15:29:07.073 回答
0

您必须将 (anotherdate) 显式转换为日期,然后从中减去 (ndays):

SELECT ID, NAME, TO_CHAR(DATEBIRTH, 'DD/MM/YYYY HH24:MI:SS')
  FROM PEOPLE 
 WHERE DATEBIRTH >= TO_DATE(ANOTHERDATE) - NDAY
于 2014-05-14T07:17:49.177 回答
-1

下面的查询从给定日期减去 n 天

select to_date('date') - 'n days' 
from dual 

例子:

select TO_DATE('02-Jul-16') - 90 
from dual
于 2016-08-31T00:55:58.880 回答