2017-03-24 6 views
0

나는 각 회사마다 개별 시간대가있는 회사 테이블이 있습니다. 예를 들어 - 사 1 시간대 UTC + 10 기업을 가지고 2 - 테이블 companies 현장 TIME_ZONE 및 America/Los_Angeles 같은 영역의 저장 약어가 2시간대가있는 Postgres 쿼리

(나는 UTC 경우에서 저장 오프셋 값을 추가 필드를 추가 할 수 있습니다 + UTC 필요한 것). 예를 들어 시간대 (UTC-0) 없이 TIMESTAMP를 저장 시작일 필드

하고있다 테이블 요청 - id | company_id | start_date(utc-0) 1 1 21-03-16 02-00 // added for company `21-03-16 12-00` 2 2 21-03-16 23-00 // added for company `22-03-16 01-00` 3 1 20-03-16 13-00 // added for company `20-03-16 23-00` 4 1 21-03-16 23-00 // added for company `22-03-16 09-00

내가 21-하기 21-03-16 00-00에서 시작 레코드를 선택합니다 03-16 23-59 각 회사의 시간대 고려. 내가 사용할 경우

하지만 -

select * from request where start_date between '2016-03-21 00:00:00.000000' AND '2016-03-21 23:59:59.999999'

을 내가 요청을받을 경우 ID = 2

하지만 이러한 요청은 각 회사에 대한 사실 22-03-16을 추가 한 4.

어떤 제안을 통해이 상황을 하나의 선택으로 결정할 수 있습니까? 많은 감사합니다.

+0

을 : 00 : 00Z 'AND'2016-03-21 23 : 59 : 59.999999Z''? OFC는 모든 행에 'time_zone'에 PostgreSQL에서 허용 된 시간대가있을 때만 작동합니다. 'CHECK ((timestamp '2000-01-01 00:00:00'AT TIME ZONE time_zone) IS NOT NULL '과 같은) check 제약 조건을 정의하여'time_zone'의 유효성을 검사 할 수 있습니다. – pozs

답변

1

귀하의 질문을 이해할 수 있을지 잘 모르겠습니다. 명확히해야 할 수도 있습니다.

하지만 시간대 정보가 저장되는 위치 companies에 참여하는 문제 해결해야한다고 말하고 싶지만 : 2016년 3월 21일 00 '사이의 시간 ZONE의 companies.time_zone AT request.start_date`처럼

SELECT r.* 
FROM request r 
    JOIN companies c ON c.id = r.company_id 
WHERE r.start_date BETWEEN '2016-03-21 00:00:00.000000' 
          AT TIME ZONE c.time_zone 
         AND '2016-03-21 23:59:59.999999' 
          AT TIME ZONE c.time_zone;