如何从TSQL查询中排除夜间?

如何从TSQL查询中排除夜间?,tsql,datetime,Tsql,Datetime,我正在编写一个TSQL查询,从约会列表中查找下一个可用的日期时间。到目前为止,我所做的工作确实在时间查询中找到了差距,但我似乎找不到一个很好的方法来排除夜晚(比如说晚上7点以后) 一个小的伪代码为。。。是这样的吗 (a.StartAptDateGETDATE+1@8am) 我似乎不能正确理解的部分是构建每个比较的正确方面。我需要排除在当晚7点到第二天早上8点之间可能返回的任何内容 提前感谢您感谢您的快速反馈-看起来我能够使用上面评论中提到的中间语句获得所需的结果。我首先将问题中的startdat

我正在编写一个TSQL查询,从约会列表中查找下一个可用的日期时间。到目前为止,我所做的工作确实在时间查询中找到了差距,但我似乎找不到一个很好的方法来排除夜晚(比如说晚上7点以后)

一个小的伪代码为。。。是这样的吗

(a.StartAptDate@7pm和a.StartAptDate>GETDATE+1@8am

我似乎不能正确理解的部分是构建每个比较的正确方面。我需要排除在当晚7点到第二天早上8点之间可能返回的任何内容


提前感谢您

感谢您的快速反馈-看起来我能够使用上面评论中提到的中间语句获得所需的结果。我首先将问题中的startdate和enddate指定为特定的时间(意思是日期部分是1900/01/01,所以这无关紧要),这样我就可以只使用时间与时间进行比较

;WITH CTE
AS (  SELECT 
         ID,StartAptDate,EndAptDate, 
         RowNumber = ROW_NUMBER() OVER( ORDER BY StartAptDate ASC )
      FROM Appointments WHERE StylistId = 1 AND StartAptDate > CAST( CONVERT( CHAR(8), GetDate() - 5, 112) AS DATETIME)
   )
   SELECT FirstApptAvail = min( a.EndAptDate )
   FROM CTE a
      INNER JOIN CTE b
         ON a.RowNumber = b.RowNumber - 1
   WHERE datediff( minute, a.EndAptDate, b.StartAptDate) >= 15 AND (CAST ( CONVERT( CHAR(8), a.StartAptDate, 108) AS DATETIME) BETWEEN '1900-01-01 07:59:59' AND '1900-01-01 18:59:59' AND CAST ( CONVERT( CHAR(8), a.EndAptDate, 108) AS DATETIME) BETWEEN '1900-01-01 07:59:59' AND '1900-01-01 18:59:59')

感谢您的快速反馈-看起来我能够使用上面评论中提到的BETWEEN语句获得期望的结果。我首先将问题中的startdate和enddate指定为特定的时间(意思是日期部分是1900/01/01,所以这无关紧要),这样我就可以只使用时间与时间进行比较

;WITH CTE
AS (  SELECT 
         ID,StartAptDate,EndAptDate, 
         RowNumber = ROW_NUMBER() OVER( ORDER BY StartAptDate ASC )
      FROM Appointments WHERE StylistId = 1 AND StartAptDate > CAST( CONVERT( CHAR(8), GetDate() - 5, 112) AS DATETIME)
   )
   SELECT FirstApptAvail = min( a.EndAptDate )
   FROM CTE a
      INNER JOIN CTE b
         ON a.RowNumber = b.RowNumber - 1
   WHERE datediff( minute, a.EndAptDate, b.StartAptDate) >= 15 AND (CAST ( CONVERT( CHAR(8), a.StartAptDate, 108) AS DATETIME) BETWEEN '1900-01-01 07:59:59' AND '1900-01-01 18:59:59' AND CAST ( CONVERT( CHAR(8), a.EndAptDate, 108) AS DATETIME) BETWEEN '1900-01-01 07:59:59' AND '1900-01-01 18:59:59')

您不能使用WHERE([日期值]在'07:00:00'和'19:00:00'之间)吗?太好了!看起来我已经过度设计了:)或者你可以在哪里做([DATETIME VALUE]::time>='07:00:00'和[DATETIME VALUE]::time你不能在哪里使用([DATE VALUE]在'07:00:00'和'19:00:00'之间)?太好了!看起来我已经过度设计了:)或者你可以在哪里做([DATETIME VALUE]::time>='07:00:00'和[DATETIME VALUE]::时间