2014-07-18 3 views
-1

일광 오프셋 기능을 사용하고 있으며이 문제를 해결하는 방법에 대한 의견을 듣고 싶습니다. 나는 다음과 같은 코드를 포함하는 저장 프로 시저를 만드는 경우를 가정 (입력은 현재 시간 @time입니다) :선택 표시가 비어있는 경우 1을 반환하고, 그렇지 않으면 2를 반환합니다.

SELECT* 
from 
dbo.DaylightSavings 
WHERE @time between Timestart AND Timeend 

SELECT 문은 위의 표보기를 반환하는 경우 이제 다음 dayligt 절약 ON되어야하므로 저장 프로 시저해야 +2의 오프셋을 반환합니다. 그렇지 않으면 위의 SELECT 문이이 아니면 테이블보기를 반환하고 daylightsavings을 OFF로 설정하고 저장 프로 시저가 +1을 반환합니다. 이 논리를 처리하는 합리적인 저장 프로 시저를 어떻게 만들 수 있습니까?

감사합니다.

시스템 :

MS SQL 2008R2

+0

가, 내가 할 것 인' 대신 SELECT COUNT (*)'를 사용하고 그 결과를 변수에 저장하십시오. 나중에 변수 값이 0이거나 0보다 큰지 여부에 따라 반환 할 항목을 구별 할 수 있습니다. – schlonzo

+0

@time이란 무엇입니까? UTC 시간은? 현지 시간이야? 어떤 시간대에? 일광 절약 시간이 다른 시간대의 * 다르다는 것을 알고 있습니까? 스프링 - 포워드 (Falling-Back) 또는 스프링 - 포워드 (Spring-Forward) 동안 갭 (gap) 동안 오버랩을 어떻게 처리합니까 일반적으로 SQL에서이 기능을 수행하는 것은 좋지 않습니다. 응용 프로그램 수준 코드에 더 적합합니다. –

답변

0

이는합니다 ('오프셋'는 시간을 가정)하고 싶은 일을해야 내가 제대로 이해하면

DECLARE @Count INT 
SET @Count = ( SELECT COUNT(*) 
       FROM 
       dbo.DaylightSavings 
       WHERE @time between Timestart AND Timeend) 

IF @Count > 0 
    SELECT DATEADD(HH, 2, @time) 
ELSE IF @Count = 0 
    SELECT DATEADD(HH, 1, @time) 
관련 문제