- PR -

特定の日付範囲であるレコードの取得方法

投稿者投稿内容
がーすい粉
会議室デビュー日: 2006/09/01
投稿数: 3
投稿日時: 2006-09-01 21:22
初めて投稿させていただきます。
IT業界1年目の新人です、よろしくおねがいしまっす!

現在、以下のような内容のSQLを作りたいのですが、どのようなSQL文を作成したらよいのか悩んでいます。ご教授いただけたら幸いです。

・DBはSQLServer2000SP4です。
・where句対象は、DateTime型のカラム
・上記カラムの値が、3月、6月、9月、12月の、15日〜月末日であるレコードを取得したい

です。likeや<>を利用したりしてtryしてますが、うまく取得できません。
よろしくおねがいいたします☆
七味唐辛子
ぬし
会議室デビュー日: 2001/12/25
投稿数: 660
投稿日時: 2006-09-01 21:35
なにが どうわからないのかさっぱり

わかる範囲で書くと3月、6月、9月、12月は UNIONで取れます
がーすい粉
会議室デビュー日: 2006/09/01
投稿数: 3
投稿日時: 2006-09-01 21:51
さっそくのご回答、ありがとうございます☆
説明下手でごめんなさい。

DATETIME型のカラム(ここではカラム名COLUM_Aとします)の値が、
3月、6月、9月、12月の、15日〜月末日の範囲におさまっているレコードの取得をしたいのです。
その場合に、どんなSQL文を書いたらうまく取得できるのかがわからず、困っています。

お答えになりましたでしょうか。。。

[ メッセージ編集済み 編集者: がーすい粉 編集日時 2006-09-01 21:53 ]
でっち6号
大ベテラン
会議室デビュー日: 2005/01/31
投稿数: 176
お住まい・勤務地: Kawasaki
投稿日時: 2006-09-01 21:54
組込み関数のMONTHとDAYを組み合わせれば良いと思いますよ。
それぞれ、引数の日付項目の月、日を返してくれますので数値で比較して下さい。

#3月、6月、9月、12月は全て3の倍数なので、条件も工夫できますね。
#UNIONでは処理コストが高いような...
七味唐辛子
ぬし
会議室デビュー日: 2001/12/25
投稿数: 660
投稿日時: 2006-09-01 23:19
月末の求め方は 3月末の場合は 4月1日か1日引いた値が3月末です
ちなみに私はSQLServerはぜんぜんわかりません。

Ahf
大ベテラン
会議室デビュー日: 2006/08/16
投稿数: 172
投稿日時: 2006-09-01 23:33
Where条件に利用する項目がDATETIME型とあるので、
でっち6号さんの言われる通り、MONTH関数とDAY関数を利用するのが一番ベター
だと思われますね。

私が同じ条件句を作るなら、ですが
MONTH関数の戻りに対してINで指定、DAY関数の戻りに対してBETWEENで指定を
かけるところかなぁと思っていますが、実行コスト的にはどうなんでしょう?
かつのり
ぬし
会議室デビュー日: 2004/03/18
投稿数: 2015
お住まい・勤務地: 札幌
投稿日時: 2006-09-02 00:00
day関数とmonth関数で比較するなら、
日付の範囲は月末を求める必要はなくて、適当に15〜31でいいと思います。

データからday関数を使ったときに月末なら31までで必ず収まりますし、
7/1がday関数によって31とされることはありえないので、
何月でも31日までかでOKです。
ハニワ祭り
大ベテラン
会議室デビュー日: 2005/11/15
投稿数: 115
投稿日時: 2006-09-02 00:16
日付に関しては、day関数の結果が15以上とするだけでもいいですね。

スキルアップ/キャリアアップ(JOB@IT)