在 sql server 查询中切换明智的日期时间检查

2021-09-16 00:00:00 vb.net sql-server

我在我的一个项目中遇到了一个 sql 查询问题.实际上,我必须通过三个班次检查某个表中的一个 DateTime 列,即,我必须根据在相应班次中下降的 RegisteredDateTime 列来获取记录.我们有以下轮班时间,轮班将采用 24 小时格式

I have one problem with sql queries in one of my projects. Actually, I have to check one DateTime column in some table with three shifts, i.e., I have to get the records based on RegisteredDateTime column which is falling in respective shifts. We have the following shift timings, the shifts will be in 24 hr formats

Shift1 : 07:00:00-12:00:00
Shift2 : 12:00:00-22:00:00
Shift3 : 22:00:00-07:00:00

我的问题是我在 shift1 和 shift2 中正确获取了记录,但在 shift3 中没有记录.我正在四处走动,以解决这个问题.我正在使用以下搜索查询来获取所有班次中的记录

My problem is I am getting the records correctly in shift1 and shift2, but not the records lies in shift3. I am going rounds, to solve this. I am using the following search query to fetch the records in all the shifts

SELECT        RequestNumber
FROM            Table
WHERE (CONVERT(Time, RegisteredDateTime) BETWEEN '" & Shift1.Split("-")(0) &"' AND ' " & Shift1.Split("-")(1) & "') 

以上查询用于 Shift1,同样我也在检查 Shift2 和 Shift3.

The above query is used for Shift1, similarly I am checking for Shift2 and Shift3 also.

大家好,@AnandPhadke 给出的想法终于对我有用了,这是我正在使用的最终查询

Hello every one, finally the idea given by @ AnandPhadke worked for me, its the final query i am using

 Dim StartNumber As Integer = Convert.ToInt32(Shft3Arr(1).Split(":")(0))
 Dim EndShift As String = (StartNumber - 1) & ":59:59"
 query += "(CONVERT(Time, Complaints.RegisteredDateTime) >= '" + Shft3Arr(0) + "') OR  (CONVERT
(Time, DATEADD(DD, 1, Complaints.RegisteredDateTime)) <= '" + EndShift + "')"

推荐答案

使用这些条件:

对于 shift1

WHERE CONVERT(Time, RegisteredDateTime) > convert(time,'07:00:00') and CONVERT(Time, RegisteredDateTime) <= convert(time,'12:00:00')

对于 shift2

WHERE CONVERT(Time, RegisteredDateTime) > convert(time,'12:00:00') and CONVERT(Time, RegisteredDateTime) <= convert(time,'22:00:00')

对于 shift3

WHERE CONVERT(Time,RegisteredDateTime) > convert(time,'22:00:00') and CONVERT(Time,  DATEADD(DD,1,RegisteredDateTime)) <= convert(time,'06:59:59')

相关文章