SQL の質問です。DATE型について、私の誕生日の一ヶ月前から誕生日当日まで検索する方法を教えてください。


(ex.. 私の誕生日が、2000年1月20日とすると、検索では2005年12月31日や、2002年01月20日でもヒットする)。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2006/02/03 12:18:14
  • 終了:--

回答(3件)

id:pellmell No.1

pellmell回答回数6ベストアンサー獲得回数02006/02/03 13:47:52

ポイント20pt

アドレスはダミーです。


DataBaseは何でしょうか?

とりあえず、Oracleと仮定してSQLを書きました。


SELECT

COLUMN1

,COLUMN2

,...

FROM TABLENAME

WHERE

TO_DATE(TO_CHAR(検索する日付,’MMDD’),’MMDD’)

BETWEEN

TO_DATE(TO_CHAR(ADD_MONTHS(誕生日,-1),’MMDD’),’MMDD’)

AND

TO_DATE(TO_CHAR(誕生日,’MMDD’),’MMDD’)


検索する日付、誕生日はDate型の項目とします。

もっと効率のいい方法があるかもしれません。

id:disca

ありがとうございます。DataBaseはPostgreSQLです。

2006/02/03 13:52:56
id:pellmell No.2

pellmell回答回数6ベストアンサー獲得回数02006/02/03 13:59:09

ポイント20pt

http://www.hatena.ne.jp/2

人力検索はてな

アドレスはダミーです。


Postgresは使用したことがないけれど、確かPostgresのSQL構文はOracleを基本としていたはず。

TO_DATE関数やTO_CHAR関数はそのまま使えるはずなので、上記SQLで動作するとおもいます。

しなかったらごめんなさい。

id:disca

はい、ありがとうございます。早速試してみます。

2006/02/03 14:27:00
id:inspfightman No.3

inspfightman回答回数6ベストアンサー獲得回数02006/02/03 15:51:28

ポイント20pt

http://www.hatena.ne.jp/3

人力検索はてな

アドレスはダミーです。


年に関わらず、誕生月から1月前までを検索したいんですよね。その場合、上記のSQL 文では、誕生月が1月の場合に12月を検索できません。

誕生月が1月の時に限って、検索条件を変更する必要があります。

1文で書くと以下のような方法が考えられます。


SELECT

date

FROM

table

WHERE

(

date_part(’month’, date ’2000-1-1’) < date_part(’month’, date ’2000-1-1’ - interval ’1 month’)

AND (

(date_part(’month’, date) = 12 AND date_part(’day’, date) >= date_part(’day’, date ’2000-1-1’))

OR (to_char(date, ’MMDD’) <= to_char (date ’2000-1-1’, ’MMDD’))

)

) OR (

to_char(date, ’MMDD’)

BETWEEN to_char(date ’2000-1-1’ - interval ’1 month’, ’MMDD’)

AND to_char(date ’2000-1-1’, ’MMDD’)

)

;


もっとスマートな方法があるかもしれません。

色々試してみてください。

id:disca

大変参考になります。現在では、誕生日前の「1」ヶ月の「1」は可変で変えたいと考えています。ありがとうございました。

2006/02/07 12:54:52

コメントはまだありません

この質問への反応(ブックマークコメント)

トラックバック

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません