• ベストアンサー

日付を表示形式で戻すSQL文を書きたい

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件が返された。

質問者が選んだベストアンサー

  • ベストアンサー
  • yamada_g
  • ベストアンサー率68% (258/374)
回答No.3

やりたいことそのままのSQLがこちらに載っています。 http://codezine.jp/article/detail/5154?p=2 参考になれば幸いです。

bxe01016
質問者

お礼

返事が遅くなりました。 リンク先を確認しました。 まさにやりたいのはこれです!! 今後の他のDBでも同様なことができるとよいなと思い、あえてDB名は書きませんでしたが、私はOracleでやりたかったのでそっくりそのまま使えます。 ありがとうございました。

すると、全ての回答が全文表示されます。

その他の回答 (2)

  • nora1962
  • ベストアンサー率60% (431/717)
回答No.2

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でも同様に実行出来ます。

bxe01016
質問者

お礼

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

すると、全ての回答が全文表示されます。
  • dda167
  • ベストアンサー率76% (55/72)
回答No.1

-- 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 /

bxe01016
質問者

お礼

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

すると、全ての回答が全文表示されます。

専門家に質問してみよう