SQLServerのSQLについての質問です。


DATETIME startDate→(2007年5月15日)
DATETIME endDate→(2008年1月03日)

があったとして、検索条件で
2007年5月初日から、2008年1月末日までを検索したいのですが、どう書けばよいでしょうか?

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2007/07/31 16:16:11
  • 終了:2007/08/07 16:20:03

回答(3件)

id:beatgoeson No.1

beatgoeson回答回数128ベストアンサー獲得回数142007/07/31 17:12:01

ポイント27pt

http://q.hatena.ne.jp/1185866169

質問の内容だと、そもそもあるテーブルにstartDateとendDateというカラムがあって、その二つのカラムが両方とも 2007年5月初日から、2008年1月末日の間にあるデータを検索したいのか、それともそもそもあるテーブルにstartDateとendDateというカラムがあって、そのカラムの値から検索条件を作りたいのかがはっきりしませんが‥

前者であれば、単純に

select * from table_a

where

startDate between '20070501' and '20080131' and

endDate between '20070501' and '20080131'

でいいと思います。

後者であれば、いろいろあり方はあるかもしれませんが、私はこうしてます。

指定した日付の月初日は、1日を求めればいいので、以下のようになります。

一旦文字列に変換して、yyyymmに'01'を連結して、datetime型に戻してます。

convert(datetime,substring(convert(char(8),startDate,112),1,6) + '01',112)

指定した日付の月末日は、その月初日の1ヶ月後を求めて、その1日前が月末日なので、以下のようになります。

一旦文字列に変換して、yyyymmに'01'を連結して、datetime型に戻し、その1ヶ月後と求めて1日前を計算してます。

dateadd(dd,-1,dateadd(mm,1,substring(convert(char(8),endDate,112),1,6) + '01'))

id:disca

すみません、詳細に説明します。

ストアドプロシージャーで、

開始日時、終了日時を指定して、

あるテーブルの、開始日-終了日の範囲内の

作成日カラムを検索するというものになります。

2007/08/01 12:44:16
id:minkpa No.2

minkpa回答回数4178ベストアンサー獲得回数552007/07/31 19:07:44

id:disca

あいまい検索?ですか?

2007/08/01 12:45:19
id:beatgoeson No.3

beatgoeson回答回数128ベストアンサー獲得回数142007/08/01 14:09:29

ポイント26pt

http://www.yahoo.co.jp/

ストアドプロシージャであれば、以下のような感じになりますかね。

CREATE PROCEDURE S_xxxx

(

@startDate datetime,

@endDate datetime

)

AS

declare @SearchDate1 datetime

declare @SearchDate2 datetime

select @SearchDate1 = convert(datetime,substring(convert(char(8),@startDate,112),1,6) + '01',112)

select @SearchDate2 = dateadd(dd,-1,dateadd(mm,1,substring(convert(char(8),@endDate,112),1,6) + '01'))


select

*

from table_hoge

where

hoge_date between @SearchDate1 and @SearchDate2

go


で、実行するときは、

exec S_xxxx '2007/05/15','2008/01/03'

となり、実際は2007/5/1~2008/1/31のデータを検索した結果を返す。

  • id:disca
    みなさま、ありがとうございます、とても参考になりました。
    感謝します(^^。

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

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

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

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