2016-09-20 78 views
0

如何查詢時間數據類型,時間數據類型在午夜兩點之間變化。 這是我試過的。如何查詢時間數據類型,並在午夜兩點之間變化

declare @timeValue time 
SET @timeValue = '23:30:00' 

SELECT @timeValue,DATEADD(minute, -30, @timeValue),DATEADD(minute, +30, @timeValue) 
WHERE @timeValue BETWEEN DATEADD(minute, -30, @timeValue) AND DATEADD(minute, +30, @timeValue)

但是,如果我們把上面的例子中尋找,如果時間在前後30分鐘之間有效,而且它改變了午夜。我沒有得到預期的結果。

預期的結果是將timeValue變量中的值與30分鐘前後的行作爲其他列。

但是,如果我使用的時間不像午夜時間穿過下面那樣,它可以正常工作。

declare @timeValue time 
SET @timeValue = '23:00:00' 

SELECT @timeValue,DATEADD(minute, -30, @timeValue),DATEADD(minute, +30, @timeValue) 
WHERE @timeValue BETWEEN DATEADD(minute, -30, @timeValue) AND DATEADD(minute, +30, @timeValue)

我按照預期得到以下響應。


23:00:22 00.0000000:30:00.0000000 23:30:00.0000000

回答

0

你的時間在午夜包裝。換言之:23:30 + 00:30 = 00:00小於23:30。未滿足條件23:00 < 23:30 < 00:00。解決方法是將參數轉換爲datetime:

declare @timeValue time 
SET @timeValue = '23:30:00' 

SELECT @timeValue,DATEADD(minute, -30, @timeValue),DATEADD(minute, +30, @timeValue) 
WHERE CONVERT(datetime,@timeValue) BETWEEN DATEADD(minute, -30, CONVERT(datetime,@timeValue)) AND DATEADD(minute, +30, CONVERT(datetime,@timeValue)) 
+0

有效答案Pawel。感謝您的迴應。 – Prateek

1

這是因爲TIME數據類型不具有日期組件給它。您將需要使用DATETIME或具有時間組件的其他日期日期類型之一。沒有日期,你的時間不在這兩次之間。

declare @timeValue DATETIME 
SET @timeValue = '23:30:00' 

SELECT @timeValue,DATEADD(minute, -30, @timeValue),DATEADD(minute, +30, @timeValue) 
WHERE @timeValue BETWEEN DATEADD(minute, -30, @timeValue) AND DATEADD(minute, +30, @timeValue) 
+0

有效的答案馬特..感謝響應。 – Prateek

0

你也可以使用一個CASE語句的幫助。如果時間值移至第二天,請將最大限制設置爲'23:59'。

declare @timeValue1 time 
SET @timeValue1 = '23:45:00' 

SELECT @timeValue1,DATEADD(minute, -30, @timeValue1),DATEADD(minute, +30, @timeValue1) 
WHERE @timeValue1 BETWEEN DATEADD(minute, -30, @timeValue1) 
    AND case WHEN(DATEADD(minute, +30, @timeValue1))<@timeValue1 THEN '23:59:59.9999999' ELSE (DATEADD(minute, +30, @timeValue1)) END 

輸出: enter image description here

+0

有效答案Unnikrishnan。感謝您的迴應。 – Prateek

相關問題