其中日期时间在列时间的上午12点和列时间的第二天上午10点之间
我有一个数据类型为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
这里是另一个可能的方式,你可以尝试
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
感谢spittingfire。这也有效。非常感激 – sly123
看看这会为你工作。我声明了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
谢谢杰森。这解决了我的问题。非常感谢 – sly123
帖子你写到目前为止请代码。 –
“,其中我的日期时间列在日期时间列的00:00:00到日期时间列的第二天的10:00:00之间。这没有意义。 –
是的你是正确的,我的意思是'我的ESTEndTime列在00:00:00的时间戳列和10:00:00的时间戳列的那一天之间'。 – sly123