- PR -

SqlServerで期間内の日付を取得するには?

投稿者投稿内容
gorisaku
ベテラン
会議室デビュー日: 2004/04/17
投稿数: 95
投稿日時: 2008-06-17 16:39
SqlServer2005を使用しています。
SQLにて対象日付期間に存在する日付を取得したいのですが
方法が分かりません。

例)
2008/5/1〜2008/5/5の期間内であれば検索結果として

2008/5/1
2008/5/2
2008/5/3
2008/5/4
2008/5/5

と5レコード取得したい。
また、対象年月を指定した場合に同様の処理
(その月に日付は何が存在するかを取得したい)
を行いたいと思っています。

皆様のお知恵を拝借できませんでしょうか?
Edosson
ぬし
会議室デビュー日: 2004/04/30
投稿数: 675
投稿日時: 2008-06-17 16:58
where節に条件を書けばいいです。
betweenでもandでも、お好きな方をどうぞ。
ひろれい
ぬし
会議室デビュー日: 2006/03/02
投稿数: 486
お住まい・勤務地: 万博開催地
投稿日時: 2008-06-17 17:01
何に困っているのか分かりかねますが・・・

SQLServer の Convert 関数 を調べると役に立つかも。
ue
ぬし
会議室デビュー日: 2005/05/07
投稿数: 581
お住まい・勤務地: 広島市
投稿日時: 2008-06-17 17:02
Books Online でいうとここらへんです。
BETWEEN
比較演算子
_________________
上本亮介 (ue) @ わんくま同盟
Microsoft MVP for VSTO (Jul 2008 - Jun 2009)
Hello Another World!
.NET 勉強会 / ヒーロー島
gorisaku
ベテラン
会議室デビュー日: 2004/04/17
投稿数: 95
投稿日時: 2008-06-17 17:02
Edossonさん ありがとうございます。

引用:

Edossonさんの書き込み (2008-06-17 16:58) より:
where節に条件を書けばいいです。
betweenでもandでも、お好きな方をどうぞ。



少しこちらから提示する内容に不備があって正しくやりたいことが
伝わっていなかったと思います。
テーブルから内容を取得するのであれば簡単にできる
(ご指摘の内容)のです。

やりたいことはテーブルは関係なくSQLにて
日付の計算を行いたいということなのです。
(例を出せばOracleのDual表的なものを使用する感じでしょうか?)

再度ご教授いただければと思います。
crab
会議室デビュー日: 2006/12/25
投稿数: 11
投稿日時: 2008-06-17 17:14
何も無いところから結果は出せませんし、OracleのようなDUAL表もありませんから、自分で日付の行を作ってあげなくてはいけないでしょう。

以下の例のStored Procedureのように。

create proc p_aaa
(
@fromDate datetime,
@toDate datetime
)
as

declare @currentDate datetime
declare @workDate table(
[Date] [datetime]
);

select @currentDate = @fromDate
while ( @currentDate >= @fromDate and @currentDate <= @toDate )
begin
insert into @workDate values ( @currentDate)
select @currentDate = dateadd(day,1,@currentDate)
end
select * from @workDate
/* end of procedure */


で、exec p_aaa '2008/5/1','2008/5/5' のように実行する。
ひろれい
ぬし
会議室デビュー日: 2006/03/02
投稿数: 486
お住まい・勤務地: 万博開催地
投稿日時: 2008-06-17 17:17
引用:

gorisakuさんの書き込み (2008-06-17 17:02) より:

Edossonさん ありがとうございます。

引用:

Edossonさんの書き込み (2008-06-17 16:58) より:
where節に条件を書けばいいです。
betweenでもandでも、お好きな方をどうぞ。



少しこちらから提示する内容に不備があって正しくやりたいことが
伝わっていなかったと思います。
テーブルから内容を取得するのであれば簡単にできる
(ご指摘の内容)のです。

やりたいことはテーブルは関係なくSQLにて
日付の計算を行いたいということなのです。
(例を出せばOracleのDual表的なものを使用する感じでしょうか?)

再度ご教授いただければと思います。


アプリ側ではなく、SQL のみで日付計算したいということですか?

では、「対象日付期間」とか「対象年月」というのはどこから取得し、どうやって指定するのですか?

ちなみに、SQLServer では

SELECT CURRENT_TIMESTAMP

なんてこと(FROM 句指定なし)が出来ます。
gorisaku
ベテラン
会議室デビュー日: 2004/04/17
投稿数: 95
投稿日時: 2008-06-17 17:24
皆様 早速のご回答ありがとうございます。

crab殿
Storedでやはり実現しないと無理でしょうか?
(Storedでは実現できると判断しているのです)

ひろれい殿
SELECT CURRENT_TIMESTAMP
ではその日しか求めることができないと思っています。
出来ればWHERE句などを使用して日付の指定を行いたいと考えています。

PGでの使用用途については、
C#よりSQLを投げ、結果として返ってきた内容を
Dataset内DataTableに
格納するというのが目標となります。
当然C#でソースを記述すれば実現可能なのはわかっていますが
出来る限りSQLで実現したいと思っています。

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