人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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

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

●質問者: disca
●カテゴリ:コンピュータ 生活
✍キーワード:12月31日 1月20日 2000年 2002年 2005年
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● pellmell
●20ポイント

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

はてな

アドレスはダミーです。


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型の項目とします。

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

◎質問者からの返答

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


2 ● pellmell
●20ポイント

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

人力検索はてな

アドレスはダミーです。


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

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

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

◎質問者からの返答

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


3 ● inspfightman
●20ポイント

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’)

)

;


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

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

◎質問者からの返答

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

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ