最速怪談選手権

2つの日付を与えてその2つの日付の間の日付を以下のような表形式で返すSQL文を作りたい。
可能でしょうか?

例えば、与える日付を以下の2つとして、
2012/01/05,2012/01/11


SQL文の実行結果は、
カラム名
2012/01/05
2012/01/06
2012/01/07
2012/01/08
2012/01/09
2012/01/10
2012/01/11


今回の例では、2012/01/05~2012/01/11までの7日間なので7件が返された。

A 回答 (3件)

やりたいことそのままのSQLがこちらに載っています。



http://codezine.jp/article/detail/5154?p=2

参考になれば幸いです。
    • good
    • 0
この回答へのお礼

返事が遅くなりました。
リンク先を確認しました。
まさにやりたいのはこれです!!

今後の他のDBでも同様なことができるとよいなと思い、あえてDB名は書きませんでしたが、私はOracleでやりたかったのでそっくりそのまま使えます。

ありがとうございました。

お礼日時:2013/03/05 20:30

MS Sqlserverの例です。


declare @from datetime;
declare @to datetime;
set @from = '2012/01/05';
set @to = '2012/01/11';
with T as ( select @from as [DT]
union all
select [DT]+1 from T
where [DT] < @to )
select * from T;

再帰SQLが使えるDB2やPostgreSQLでも同様に実行出来ます。
    • good
    • 0
この回答へのお礼

返事が遅くなりました。

質問には書かなかったのですが、Oracle11g(11.1.0.6.0)での利用を考えておりました。あいにく再帰WITH句はOracle11gR2から利用可能なようです。

でも、とても参考になりました。
ありがとうございました。

お礼日時:2013/03/05 22:24

-- SQL*Plusでの例です



VARIABLE date_from VARCHAR2(10)
VARIABLE date_to VARCHAR2(10)

EXECUTE :date_from := '2012/01/05'
EXECUTE :date_to := '2012/01/11'

SELECT TO_CHAR(TO_DATE(:date_from, 'YYYY/MM/DD') + level - 1, 'YYYY/MM/DD')
FROM dual
CONNECT BY level <= TO_DATE(:date_to, 'YYYY/MM/DD') - TO_DATE(:date_from, 'YYYY/MM/DD') + 1
/
    • good
    • 0
この回答へのお礼

返事が遅くなりました。

Oracleの階層問い合わせというものがあることを初めて知りました。とても参考になりました。
ありがとうございました。

お礼日時:2013/03/19 18:46

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!