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

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

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

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



●質問者: disca
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:1月 2007年 2008年 5月 5月15日
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● beatgoeson
●27ポイント

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

◎質問者からの返答

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

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

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

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

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


2 ● minkpa
●27ポイント

http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=18682&am...

◎質問者からの返答

あいまい検索?ですか?


3 ● beatgoeson
●26ポイント

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のデータを検索した結果を返す。

関連質問


●質問をもっと探す●



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