2013-03-04 7 views
6

私はPostgres 8.3データベースで作業しています。私が使用するクエリは、平日に含まれる行のみを選択するためのものです。今私は以下の例のように手でこれをやっていますが、これをいくつかのfunciotnに転送して、開始日と終了日を指定して、以下のように同じロジックを適用したいと思います。つまり、PostgreSQLの平日にのみデータを選択する関数を書く

入力を開始日と終了日とする関数を作成すると、データセットの平日のみに含まれるすべての行を選択することができます(すべてのstaurdayを除外したい下の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'); 
+1

アップグレードを検討する必要があります。 8.3はサポートされなくなりました。 –

+0

'start_Time'のデータ型は? –

答えて

17

です。次にto_timestampを使用してtimestampに変換し、EXTRACTを使用して曜日を抽出する必要があります。

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

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

リンク:Data Type Formatting FunctionsDate/Time Functions and Operators

1

例えばdatetime functions

をチェックFridayを表す

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

戻り5、。

1

次のように曜日が返されます。デフォルト設定0で

date_part('dow', Date); 

日曜日で、6 start_timeがテキストであると思われるあなたの例に基づいて、土曜日

4
select * 
from base_tbl 
where extract(dow from start_time) in (1,2,3,4,5) 
1
select to_char(date, 'Day') from table 
+0

これはOracle SQL用です – karz