2011-03-15 4 views
3

timestamp without time zone 열이있는 테이블이 있습니다 (입력 된 데이터는 Australia/Sydney 시간대라고 가정 됨).postgresql : 시간대가없는 시간대의 민감한 쿼리

America/New_York 시간대의 시간 범위 (즉, 오전 8시 - 오후 4시)에 대한 데이터를 쿼리합니다.

쉬운 방법이 있나요?

감사합니다.

+0

통해 해당이 NY 대응의 변환해야합니다. 데이터 유형으로서 시간대는 시간과 관련하여 만 존재합니다. (당신은 그들을 함께 비교하는 시간에 추가 할 수있는 간격 열이있을 수 있습니다.) –

+0

고마워 ... – pstanton

답변

3

알아 냈어.

당신은 my_ts at time zone 'Australia/Sydney'with time zone 버전의에 먼저 시간을 변환하고 난 당신이 타임 스탬프없이 시간을 의미 생각 at time zone 'America/New_York'

select 
    my_ts as "Default(syd)", 
    my_ts at time zone 'Australia/Sydney' as "SYD", 
    my_ts at time zone 'Australia/Sydney' at time zone 'America/New_York' as "NY", 
    date_part('hour', my_ts at time zone 'Australia/Sydney' at time zone 'America/New_York') as "NY-hr" 
from my_table 
where date_part('hour', my_ts at time zone 'Australia/Sydney' at time zone 'America/New_York')>=8 
    and date_part('hour', my_ts at time zone 'Australia/Sydney' at time zone 'America/New_York')<16 
+0

지금 뉴욕에있는 시간 인 3 시간을 더하면 다음과 같이하십시오.'select now() :: time, ((now() :: time + '3:00' :: interval) 'America/New_York'시간대의 'America/Vancouver'시간대) :: time;'내 기본 구역은 America/Vancouver입니다. 이것은 나에게 6 시간 떨어져있는 시간을 준다. 차이점을 두 배로 늘려서 평준화하지 않았습니다. –

+0

어쩌면'now()'가 이미 tz로 ts를 반환하고 있습니까? 나도 모르지만 내 쿼리는 100 % 나를 위해 일합니다. 당신의 질문이 내 문제에는 적용되지 않는 반면 철저하게 테스트했습니다. – pstanton

0

당신이 그들을 비교할 수 있도록 같은 시간대에 모든 것을 변환 할 수 있습니다 (시간대가 설정 한 경우) :

select current_time, current_time at time zone 'gmt'; 
     timetz  |  timezone  
-------------------+------------------- 
20:50:51.07742-07 | 03:50:51.07742+00 

시간대를 설정하고 그것을 약간의 현지 시간을 수정해야되지 않은 경우 :

select now()::time, now()::time + '+8:00'::interval; 
     now  | ?column?  
-----------------+----------------- 
20:57:49.420742 | 04:57:49.420742 

원하는대로 시간을 얻으면 시간 만 추출하면 간단한 조건을 사용하여 적절한 시간을 선택할 수 있습니다.

select * 
    from 
    (select extract(hour from now()::time + '+8:00'::interval) as hour) as t 
    where hour between 8 and 16; 
+0

하지만 어떻게 시간 범위 즉, 시간 범위에 쿼리합니까 16:00 시간 범위는 다른 시간대에 있습니까? – pstanton

+0

고마워.하지만 내 질문에 답하고 있지 않다. 아마도 내가 제대로 설명하지 못했을 것이다. 나는 시드니에있는 시스템에서 실제 날짜를 다루고있다. – pstanton

+0

어쩌면 내가 제대로 설명 했는가 그러나 대답은 첫줄에있다. 시간대가있는 열로 바꾸고 열을 저장하는 것이 훨씬 낫습니다 (뉴욕에서 온 어떤 식 으로든 이미 알고 있기 때문에). 적절한 시간대로 관련 항목을 변경하십시오. 일단 PG가 올바른 일을하고 모든 전환이 사라지면 문제가 사라지게됩니다. current_time 및 now()는 날짜와 마찬가지로 실제 예제로 사용됩니다. –