2016-10-10 69 views
-1

我想比較兩個時間值與當前時間在sql服務器。時間是24小時制。我想要的代碼是,如何在SQL Server中比較24小時格式的時間

declare @StartTime varchar(10)='16:30' 
declare @EndTime varchar(10)='10:10' 
declare @CurrTime varchar(10)='09:30' 

select case when CONVERT(time,@CurrTime) between CONVERT(time,@StartTime) and CONVERT(time,@EndTime) then 'SUCCESS' else 'FAIL' end 

並給出輸出爲'失敗'。 請建議解決方案。

+0

FAIL是正確的輸出 –

+4

。 ..哪個是對的。您的16:30的開始時間是在結束時間之後,所以當前時間永遠不會在這之間。您可能只是在變量 – bassrek

+0

中輸入了錯誤的值,我的開始時間是下午4:30,結束時間是下午10點10分。但我的時間價值是動態的,所以終止時間可能會或可能不是第二天,所以我需要檢查並相應地比較 –

回答

0

您需要使用datetime數據類型和盒時,檢查是否開始日期>結束日期適用DATEADD明星日期的情況下,它是更大然後結束日期:

DECLARE @Start nvarchar(5)= N'16:30', 
     @End nvarchar(5)= N'10:10', 
     @Curr nvarchar(5)=N'09:30' 

DECLARE @curdate nvarchar(9) = CONVERT(nvarchar(10),GETDATE(),112)+' ' 

DECLARE @starttime datetime = @curdate + @Start + ':00.000', 
     @endtime datetime = @curdate + @End + ':00.000', 
     @currtime datetime = @curdate + @Curr + ':00.000' 

SELECT CASE WHEN @currtime between (
    CASE WHEN @starttime > @endtime 
      THEN DATEADD(day,-1,@starttime) 
      ELSE @starttime END 
         ) and @endtime THEN 'SUCCESS' 
             ELSE 'FAIL' END as result 
+0

在我的上述問題中,我的開始時間是下午4:30(16:30)和結束時間第二天上午10點10分。但我的時間值是動態的,所以終止時間可能會或可能不是第二天,所以我需要檢查並相應地進行比較。我該如何實現這個 –

+0

您是否運行過我提供的示例?我用CASE WHEN檢查了這一點。 – gofr1

+0

謝謝,正是我想要的。 –