2013-03-04 2 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