web-dev-qa-db-ja.com

オラクルの日付範囲

oracle 10g dbを使用すると、次のようなテーブルがあります。

 create table x(
 ID NUMBER(10) primary key,
 wedding DATE NOT NULL
 );

どうやって

 select * from x where wedding is in june 2008???

おそらく簡単なことだと思いますが、今のところ満足のいく答えは見つかりませんでした。助けていただければ幸いです。

11
Hoax

使用する:

SELECT *
  FROM x
 WHERE x.wedding BETWEEN TO_DATE('2008-JUN-01', 'YYYY-MON-DD') 
                            AND TO_DATE('2008-JUL-01', 'YYYY-MON-DD')

TO_DATEを使用すると、時刻部分が00:00:00の日付が作成されます。ロジックを使用して現在の日付を深夜の1秒前に修正する場合を除き、終了日は1日前である必要があります。未テスト:

TO_DATE('2008-JUN-30', 'YYYY-MON-DD') + 1 - (1/(24*60*60))

これにより、2008年6月30日に1日が加算され、次に1秒が減算されて30-Jun-2008 23:59の最終日が返されます。

参照:

21
OMG Ponies

これはANSISQLであり、バージョン9iの時点でOracleによってサポートされています。

_SELECT *
FROM   x
WHERE  EXTRACT(YEAR  FROM wedding) = 2008
AND    EXTRACT(MONTH FROM wedding) =   06
_

Oracle固有のTO_CHAR()を使用した従来のソリューション:

_SELECT *
FROM   x
WHERE  TO_CHAR(wedding, 'YYYY-MMM') = '2008-JUN'
_

(後者の解決策は、恐竜がまだ地球を歩いているときにサポートされていました)

2
Roland Bouman