2017-11-27 1 views
1

나는 몇 가지 다른 요율을 가진 예약 플랫폼에서 일하고 있습니다. 이 요율은 시간대, 요일 및 일로 결정됩니다.날짜/시간 표시

  • 월요일부터 금요일까지 오전 9시 오후 5시
  • 에, 토요일과 일요일 오전 9시
  • 토요일과 일요일 자정 오후 5
  • 토요일과 일요일 오전 9 : 여기에 포함 된 간격 유형의 몇 가지 예입니다 언제 자정 언제
  • 12월 23일 & 24 일,
  • 12월 26일 & 27 일 오후 5시,

특정 날짜에 다른 실효 환율을 쿼리 할 수 ​​있도록 이것을 표현하는 가장 좋은 방법은 무엇입니까?

지금까지 내가 수행 한 방법은 두 개의 배열 유형 열 days_of_week[]hours_of_day[]을 사용하여 각 비율이 적용되는 요일/시간으로 채우는 것입니다. 12 월과 같은 특수한 경우를 설명하기 위해 필드에도 valid_frominvalid_after이 있지만, 매년 새로운 입력이 필요합니다.

간격과 같은 here에 대한 datetime 함수를 살펴 보았지만 해결할 수있는 것처럼 보지 못했습니다.

+0

[범위 유형] (https://www.postgresql.org/docs/current/static/rangetypes.html)의 tstzrange를 참조하십시오. – Adam

+0

tstzrange는 특정 기간 (예 : 10 월 1 일 ~ 20 일)의 범위에 해당하는 것 같습니다. –

+0

의 일반 10 일 ~ 20 일이며 여러 OR이 작동하지 않습니다. –

답변

0

왜 그냥 where 절에 나열하지 않습니까? 첫 번째 샘플에 대한 예 :

t=# select now(),extract('dow' from now()) between 1 and 5 and now()::time between '09:00' and '17:00'; 
       now    | ?column? 
-------------------------------+---------- 
2017-11-27 16:56:01.544642+00 | t 

은 그래서 당신은 괄호에 (extract('dow' from now()) between 1 and 5 and now()::time between '09:00' and '17:00')을 가지고 OR에 걸쳐 같은 괄호를 추가 ...

당신은 인수로 timestamptz와 함수에 모든 addthem과에서 사용하는 허위의 사실 반환 할 수 있습니다 where 절