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」の「 ON OR AFTER」「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 に答える