其中,日期时间介于列时间的上午12点到列时间的次日上午10点之间



我有一个数据类型为datetime的列,导入数据的方式始终是前一天到今天。

表中没有存储历史数据-在导入新数据之前,会删除以前的数据。

话虽如此,我希望在我的ESTEndTime列位于时间戳列的00:00:00和时间戳列第二天的10:00:00之间的地方写一个where子句。

我已经搜索过了,但找不到任何具体的东西。

其目的主要是捕捉那些通宵工作的人的结束时间。导出数据时,它总是作为前一天导出到第二天,例如10月1日到10月2日。这将使我们能够看到那些通宵工作的人的最新注销时间。在我刚才提到的示例中,数据将包括从10月1日00:00:00到10月2日23:59:59的所有数据。我们没有办法限制在一个特定的时间。因此,使用我希望实现的示例是在where子句中限制它,其中时间在10月1日00:00:00到10月2日10:00:00之间。问题是我不想使用那些实际日期,因为我的日期总是在变化,所以我来这里寻求帮助。

我有代码,但没有得到预期的结果

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

以下是尝试的另一种可能方法

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

看看这是否适用于您。我声明了两个变量来保存前一天的日期和时间以及当前日期和时间。我使用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

最新更新