11

Postgres 8.3 データベースに取り組んでいます。私が使用するクエリは、平日に含まれる行のみを選択するためのものです。現在、以下の例のように手動でこれを行っていますが、これをいくつかの関数に転送して、開始日と終了日を指定し、以下のように同じロジックを適用できるようにしたいと考えています。あれは

入力が開始日と終了日であり、関数の結果がデータセットの平日にのみ含まれるすべての行を選択する関数を作成するにはどうすればよいですか (where 句の条件のように、すべての土曜日と日曜日を除外したい)下)?

create table filter_tbl as
select *
from base_tbl  where
(start_Time >= '2012-11-5' and start_Time < '2012-11-10')
or (start_time >= '2012-11-12' and start_time < '2012-11-17')
or (start_time >= '2012-11-19' and start_time < '2012-11-24')
or (start_time >= '2012-11-26' and start_time < '2012-12-01')
or (start_time >= '2012-12-03' and start_time < '2012-12-07')
or (start_time >= '2012-12-10' and start_time < '2012-12-14')
or (start_time >= '2012-12-17' and start_time < '2012-12-21')
or (start_time >= '2012-12-24' and start_time < '2012-12-28')
or (start_time >= '2012-12-31' and start_time < '2013-01-04')
or (start_time >= '2013-01-07' and start_time < '2013-01-11')
or (start_time >= '2013-01-14' and start_time < '2013-01-18')
or (start_time >= '2013-01-21' and start_time < '2013-01-25')
or (start_time >= '2013-01-28' and start_time < '2013-02-02')
or (start_time >= '2013-02-04' and start_time < '2013-02-09')
or (start_time >= '2013-02-11' and start_time < '2013-02-16')
or (start_time >= '2013-02-18' and start_time < '2013-02-23')
or (start_time >= '2013-02-25' and start_time < '2013-03-02')
or (start_time >= '2013-03-04' and start_time < '2013-03-09')
or (start_time >= '2013-03-11' and start_time < '2013-03-16');
4

5 に答える 5

19

あなたの例に基づいて、それstart_timeはテキストのようです。timestamp次に、それをusingに変換してから、 を使用to_timestampして曜日を抽出する必要がありますEXTRACT

あなたのWHERE句は次のようになります:

WHERE EXTRACT(dow FROM timestamp (to_timestamp(start_time, "YYYY-MM-DD"))
NOT IN (0,6)

リンク: Data Type Formatting FunctionsおよびDate/Time Functions and Operators .

于 2013-03-04T21:13:15.633 に答える
8
select *
from base_tbl  
where extract(dow from start_time) in (1,2,3,4,5)
于 2013-03-04T21:01:32.277 に答える
1

日時機能を確認する

例えば

SELECT EXTRACT(DOW FROM TIMESTAMP '2001-02-16 20:38:40');

を返します。5これはを表しFridayます。

于 2013-03-04T21:01:19.637 に答える
1

以下は曜日を返す必要があります。

date_part('dow', Date);

デフォルト設定では、0は日曜日、6は土曜日です。

于 2013-03-04T21:01:32.210 に答える