1

日付で分割され、次の形式で名前が付けられた一連のテーブルがあります。

public.schedule_20121018

forループを20121018実行できるように、上記のパターンで一連の日付を生成する方法はありますか?SELECTinformation_schema.tables

とりあえず持ってる

SELECT * FROM information_schema.tables
WHERE table_type = 'BASE TABLE'
AND table_schema = 'public'
AND table_name like 'schedule_%'
ORDER BY table_name;

しかし、たとえば、日付シーケンスが から まで始まるように、過去 7 日間の記録が必要20121012です20121018。ありがとう!

4

2 に答える 2

3
SELECT *
FROM information_schema.tables
WHERE table_type = 'BASE TABLE'
    AND table_schema = 'public'
    AND table_name in (
        select 'schedule_' || to_char(d, 'YYYYMMDD')
        from 
        generate_series(current_date - 7, current_date - 1, '1 day') s(d)
        )
ORDER BY table_name;

古い Postgresql バージョン:

SELECT *
FROM information_schema.tables
WHERE table_type = 'BASE TABLE'
    AND table_schema = 'public'
    AND table_name in (
        select 'schedule_' || to_char(current_date - d, 'YYYYMMDD')
        from 
        generate_series(7, 1, -1) s(d)
        )
ORDER BY table_name;
于 2012-10-19T15:23:58.667 に答える
2

を使用generate_seriesし、場合によってto_charは書式設定に使用します。

regress=# select generate_series(DATE '20121012', DATE '20121018', interval '1' day);
    generate_series     
------------------------
 2012-10-12 00:00:00+08
 2012-10-13 00:00:00+08
 2012-10-14 00:00:00+08
 2012-10-15 00:00:00+08
 2012-10-16 00:00:00+08
 2012-10-17 00:00:00+08
 2012-10-18 00:00:00+08
(7 rows)
于 2012-10-19T15:23:59.603 に答える