sql-server - sql server 查询中的明智移位日期时间检查

标签 sql-server vb.net

我在我的一个项目中遇到了 sql 查询问题。实际上,我必须检查某个具有三个类次的表中的一个 DateTime 列,即,我必须根据相应类次中的 RegisteredDateTime 列获取记录。我们的轮类时间如下,轮类时间为 24 小时制

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

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

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

上面的查询用于 Shift1,类似地我也在检查 Shift2 和 Shift3。

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

 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 + "')"

最佳答案

这里最简单的事情就是改变时间(双关语)!

您的时间为 7-12,12-22,22-7*(7* 为第二天)

使用一点点魔法将它们转移到 0-5,5-15,15-24,这将与您正在测试的转变开始的日期范围相匹配,正确?

SELECT RequestNumber
FROM   Table
WHERE  DateAdd(hh,-7,CONVERT(Time, RegisteredDateTime))
       BETWEEN ....

虽然逻辑上的好不是可控制的,所以我们以相反的方式改变范围。

SELECT RequestNumber
FROM   Table
WHERE  CONVERT(Time, RegisteredDateTime)
       BETWEEN DateAdd(hh,7,@date1) AND DateAdd(hh,7,@date2)

关于sql-server - sql server 查询中的明智移位日期时间检查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12636022/

相关文章:

sql-server - SQL Server 全文搜索是搜索短语而不是文档的正确工具吗?

vb.net - 如何在 VB.NET Newtonsoft 中解析 Json 子项

asp.net - "ServiceHost only supports class service types"

vb.net - HttpWebRequest FileUpload 导致 OutOfMemoryException

javascript - 第二次点击监听器后 Google 图表卡住

sql-server - HTTP 状态 500 - 此驱动程序不支持 Java 运行时环境 (JRE) 版本 1.7

sql-server - 如何在sql server中编写类似于ISNULL的IsNullOrEmpty方法

sql - 检查字符串是否包含前导字母

sql-server - 错误 SQL71624 : The permission 'CONNECT' is not valid for the target object 'guest' in Microsoft Azure SQL Database v12

mysql - 如何让php代码以vbnet形式执行