2008-10-07 4 views
5

데이터베이스 응용 프로그램이 다른 시간대의 여러 사이트에 배포 될 예정입니다.T-SQL의 표준 시간대 오프셋 결정

올해 YTD 계산을 위해 올해 1 월 1 일 자정의 UTC 타임 스탬프를 결정하는 T-SQL 함수가 필요합니다. 모든 데이터는 UTC 타임 스탬프로 저장됩니다.

예를 들어 시카고는 DST (일광 절약 시간제)가 적용된 UTC-6이고 2008 년 시카고에서 실행되는 경우 함수는 '2008-01-01 06:00:00'을 반환해야합니다. 내년에 뉴욕 (GMT-5 + DST)을 운영하는 경우 '2009-01-01 05:00:00'을 반환해야합니다.

나는 올해 (GETDATE())부터 현재 연도를 얻을 수 있습니다. 나는 오프셋 (offset)을 결정하기 위해서 GETDATE()와 GETUTCDATE() 사이의 DATEDIFF를 할 수 있다고 생각했지만 결과는 DST 중에 실행되는지 그렇지 않은가에 달려있다. 오프셋 또는 현재 시간이 DST인지 아닌지를 결정하기 위해 내장 된 T-SQL 함수를 모릅니다.

T-SQL에서이 문제에 대한 해결책을 가진 사람이 있습니까? 난 하드 코딩하거나 테이블에 저장할 수 있지만하지 않을 것입니다. 나는 이것이 SQL Server 2005의 CLR 통합을 사용하기에 완벽한 상황이라고 생각합니다. 내가 모르는 T-SQL 솔루션이 있는지 궁금합니다.

답변

2

체크 아웃이 앞의 질문과 관련에 대한 답변 정보 :

Effectively Converting dates between UTC and Local (ie. PST) time in SQL 2005

(. 우리가 시간대에 일부 도움을받을 다음 버전의 SQL Server에서 SQL 서버 2005의 시간대와 DST 테이블을 구축해야 할, 요약하기)

+0

감사합니다. Eric. 이전에 제안한 것처럼 테이블 기반 솔루션을 구현했습니다. 나는 내가 놓친 뭔가가 내 인생을 편하게 해 줄 수 있는지 궁금해하고 있었다. –

0

흠, 나는이 문제를 이해하지 못하고 있다고 생각합니다. 데이터베이스 애플 리케이션이 이미 모든 트랜잭션에 대해 UTC 타임 스탬프를 저장하고 있고 "로컬 시간"의 첫 해 이후로 일부 값을 합산하려는 경우 조건은 다음과 같아야합니다.

(타임 스탬프 + (GETUTCDATE() - GETDATE()) 날짜 등)> 캐스트 ('01/01/2008 ')

DST에 올해에 쿼리를 실행할 때에 따라 오프에 또는 수 있습니다 -하지만 getdate()는이를 고려하여 매번 오프셋을 동적으로 계산해야합니다. 내가 틀리지 않는

나는 ... 생각

... :-)

+0

오프셋은 미래의 임의의 날짜가 아니라 현재 날짜를 기준으로합니다. 또한 클라이언트의 시간대가 아니라 서버의 시간대와 관련됩니다. – neonski

0

에서, GETUTCDATE() 함수가 서버에서 정의 된 표준 시간대를 사용합니다 - 그것은 클라이언트의 시간대에 대한 정보가없는 (또는 모든 시간대). 나는 정보가 SQL Server 2005의 어느 곳에 나 저장되어 있다고 생각하지 않기 때문에이 정보를 계산할 수 없습니다.

아마 Oracle's time zone file에서 데이터를 빌려 올 수 있고 자신의 SQL Server 기능을 만들 수 있습니까?

주제 끄기 (다른 사람에게 도움이 될 수 있습니다)하지만 당신은 오라클을 사용하고 있다면, 당신은 'TIME ZONE AT'는 FROM_TZ 기능과 사용할 수 있습니다

FROM_TZ(YOUR_TIMESTAMP, 'UTC') AT TIME ZONE 'America/Dawson_Creek' 
관련 문제