2017-10-21 236 views
0

我有一個數據類型爲datetime的列,導入數據的方式始終是前一天到今天。其中日期時間在列時間的上午12點和列時間的第二天上午10點之間

表中沒有存儲歷史數據 - 之前的數據在導入新數據之前被刪除。

這就是說我想寫一個where子句,其中我的ESTEndTime列在時間戳列的00:00:00和時間戳列的第二天的10:00:00之間。

我已經搜索,但找不到具體到我正在尋找什麼。

目的是主要捕捉那些在夜間工作的人的最終時間。數據導出時,它始終導出爲前一天至第二天,例如10月1日至10月2日。這將使我們能夠看到過夜工作人員的最新註銷時間。在我剛剛提到的例子中,數據將包括從10月1日00:00:00到10月2日23:59:59的所有內容。我們無法限制到特定時間。所以,當我希望實現的時候,使用這個例子將它限制在10月1日00:00:00到10月2日10:00:00之間的where子句中。問題是我不想使用那些實際的日期,因爲我的日期總是在變化,所以我在這裏尋求幫助。

代碼,我有,但沒有得到預期的結果

SELECT timestamp, emp_id, dept, ESTStartTime, ESTEndTime 
    ,CONCAT(emp_id, '-', FORMAT(ESTStartTime, 'yyyy/MM/dd-HH:mm')) AS Index2Start 
    ,CONCAT(emp_id, '-', FORMAT(ESTEndTime, 'yyyy/MM/dd-HH:mm')) AS Index3Stop 
    ,CONCAT(emp_id, '-', FORMAT(ESTEndTime, 'yyyy/MM/dd')) AS Index3StopDay 

FROM   dbo.[test] 
WHERE ESTEndTime BETWEEN DATEADD(DAY, DATEDIFF(DAY, 0, timestamp), 0) + '00:00' 
      AND DATEADD(DAY, DATEDIFF(DAY, 1, timestamp), 1) + '10:00' 
ORDER BY ESTEndTime DESC 
+0

帖子你寫到目前爲止請代碼。 –

+0

「,其中我的日期時間列在日期時間列的00:00:00到日期時間列的第二天的10:00:00之間。這沒有意義。 –

+0

是的你是正確的,我的意思是'我的ESTEndTime列在00:00:00的時間戳列和10:00:00的時間戳列的那一天之間'。 – sly123

回答

0

這裏是另一個可能的方式,你可以嘗試

SELECT DISTINCT ee.* 
FROM table ee 
CROSS APPLY (
    select MIN(timestamp) AS timestamp, NextDate = DATEADD(HOUR,10,DATEADD(DAY,1,MIN(timestamp))) from table 
) maxdate 
WHERE ee.ESTEndTime BETWEEN maxdate.timestamp AND maxdate.NextDate 
+0

感謝spittingfire。這也有效。非常感激 – sly123

0

看看這會爲你工作。我聲明瞭2個變量來保存前一天的日期和時間以及當天的日期和時間。我用GETDATE()獲取當前日期和時間。我從中提取日期部分,並減去前一天的一天。然後我將日期轉換爲VARCHAR並增加了時間。 SQL Server將隱式地將該字符串轉換回DATETIME值。

--Previous day at 12:00am 
DECLARE @prevday DATETIME = CONVERT(VARCHAR,CONVERT(DATE,(DATEADD(DD,-1,GETDATE())))) + ' 12:00AM'; 
--Current day at 10:00am 
DECLARE @currentday DATETIME = CONVERT(VARCHAR,CONVERT(DATE,GETDATE())) + ' 10:00 AM' ; 

SELECT timestamp, emp_id, dept, ESTStartTime, ESTEndTime 
    ,CONCAT(emp_id, '-', FORMAT(ESTStartTime, 'yyyy/MM/dd-HH:mm')) AS Index2Start 
    ,CONCAT(emp_id, '-', FORMAT(ESTEndTime, 'yyyy/MM/dd-HH:mm')) AS Index3Stop 
    ,CONCAT(emp_id, '-', FORMAT(ESTEndTime, 'yyyy/MM/dd')) AS Index3StopDay 

FROM   dbo.[test] 
WHERE ESTEndTime BETWEEN @prevday AND @currentday 
ORDER BY ESTEndTime DESC 
+0

謝謝傑森。這解決了我的問題。非常感謝 – sly123

相關問題