2012-01-13 5 views
0

정말 전문가의 SQL 도움말이 필요합니다. 나는 저장 프로 시저를 만들고 있는데 모든 것을 표시하고 멋질 때까지 표시한다. 데이터베이스에 저장된 모든 것은 UTC에 저장되지만 브라우저 GMT 오프셋을 얻습니다. 그러면 미리 정의 된 시간 범위가 결정됩니다. 문제는 표시 할 날짜를 사용하는 것입니다. 그러나 GMT 오프셋으로 인해 표시되는 날짜가 잘못되어 사람들을 혼란스럽게합니다. 나는 간단한 날짜로 표시하고 여기가 변환되는 부분이다 : 나는 그것을 변환 할 수있는 기능을 잃게 간단한 날짜로하여UTC에 맞게 조정 날짜를 변환하는 방법은 무엇입니까?

SELECT 
     BundleEvent.BundleId, 
     CAST(BundleEvent.EventDate AS DATE) 
    FROM dbo.BundleEvent WITH (NOLOCK) 
    JOIN dbo.BundleUser WITH (NOLOCK) 
     ON BundleEvent.BundleId = BundleUser.BundleId 
    WHERE BundleEvent.EventDate >= @StartTimeGmt AND BundleEvent.EventDate <= @EndTimeGmt 
     AND BundleUser.UserId = CASE WHEN @UserId IS NULL THEN BundleUser.UserId ELSE @UserId END 
    GROUP BY 
     BundleEvent.BundleId, 
     CAST(BundleEvent.EventDate AS DATE) 

때문에 그룹. 따라서 사람들이 오늘 범위를 선택하면 GMT 오프셋 때문에 오늘과 어제로부터 날짜를 얻을 수 있습니다. 전에이 문제가있는 사람이 있습니까? 그렇다면 어떤 솔루션을 사용 했습니까? 저장 프로 시저로 작업하기 때문에 매우 제한적입니다. 이 문제를 해결하는 방법을 모르겠습니다.

+0

시간대를 조정하려면 날짜 이상이 필요합니다. 그렇지 않으면 조정할 것이 없습니다. 가능하면 시간대를 미리 결정하고 선택한 검색어로 정보를 보내고 조정 한 다음 DATE (으)로 전송할 수 있습니다. 또는 전체 UTC를 반환하고 프로그래밍 방식으로 조정하십시오. – Ilion

답변

0

데이터베이스에서이 문제를 해결해야한다고 생각하지 마십시오. utc 날짜를 저장하는 것이 정확합니다. 프런트 엔드에서 사용자의 시간 오프셋을 처리해야합니다 (모든 사용자 권한에 따라 다를 수 있음).

프런트 엔드 앱은 '오늘'요청에 대해서도 utc 날짜를 지정해야합니다.

관련 문제