- - PR -
特定の日付範囲であるレコードの取得方法
| 投稿者 | 投稿内容 |
|---|---|
|
投稿日時: 2006-09-01 21:22
初めて投稿させていただきます。
IT業界1年目の新人です、よろしくおねがいしまっす! 現在、以下のような内容のSQLを作りたいのですが、どのようなSQL文を作成したらよいのか悩んでいます。ご教授いただけたら幸いです。 ・DBはSQLServer2000SP4です。 ・where句対象は、DateTime型のカラム ・上記カラムの値が、3月、6月、9月、12月の、15日〜月末日であるレコードを取得したい です。likeや<>を利用したりしてtryしてますが、うまく取得できません。 よろしくおねがいいたします☆ |
|
投稿日時: 2006-09-01 21:35
なにが どうわからないのかさっぱり
わかる範囲で書くと3月、6月、9月、12月は UNIONで取れます |
|
投稿日時: 2006-09-01 21:51
さっそくのご回答、ありがとうございます☆
説明下手でごめんなさい。 DATETIME型のカラム(ここではカラム名COLUM_Aとします)の値が、 3月、6月、9月、12月の、15日〜月末日の範囲におさまっているレコードの取得をしたいのです。 その場合に、どんなSQL文を書いたらうまく取得できるのかがわからず、困っています。 お答えになりましたでしょうか。。。 [ メッセージ編集済み 編集者: がーすい粉 編集日時 2006-09-01 21:53 ] |
|
投稿日時: 2006-09-01 21:54
組込み関数のMONTHとDAYを組み合わせれば良いと思いますよ。
それぞれ、引数の日付項目の月、日を返してくれますので数値で比較して下さい。 #3月、6月、9月、12月は全て3の倍数なので、条件も工夫できますね。 #UNIONでは処理コストが高いような... |
|
投稿日時: 2006-09-01 23:19
月末の求め方は 3月末の場合は 4月1日か1日引いた値が3月末です
ちなみに私はSQLServerはぜんぜんわかりません。 |
|
投稿日時: 2006-09-01 23:33
Where条件に利用する項目がDATETIME型とあるので、
でっち6号さんの言われる通り、MONTH関数とDAY関数を利用するのが一番ベター だと思われますね。 私が同じ条件句を作るなら、ですが MONTH関数の戻りに対してINで指定、DAY関数の戻りに対してBETWEENで指定を かけるところかなぁと思っていますが、実行コスト的にはどうなんでしょう? |
|
投稿日時: 2006-09-02 00:00
day関数とmonth関数で比較するなら、
日付の範囲は月末を求める必要はなくて、適当に15〜31でいいと思います。 データからday関数を使ったときに月末なら31までで必ず収まりますし、 7/1がday関数によって31とされることはありえないので、 何月でも31日までかでOKです。 |
|
投稿日時: 2006-09-02 00:16
日付に関しては、day関数の結果が15以上とするだけでもいいですね。
|
