SQL语句以选择前一天中有时间的所有行

时间:2019-08-13 16:30:46

标签: sql sql-server tsql

需要选择前一天但上午08:00之前的行。

(date >= dateadd(day,datediff(day,1,GETDATE()),0)
       AND CONVERT(varchar, date,108) BETWEEN '00:00:00' AND '08:00:00') 

返回前一天至上午08:00之前的行。

2 个答案:

答案 0 :(得分:3)

您可以使用:

where date >= dateadd(day, -1, convert(date, getdate())) and
      date < dateadd(hour, -16, convert(date, getdate()))

此查询是结构化的,因此可以利用索引。

您也可以这样表达:

where convert(date, [date]) = dateadd(day, -1, convert(date, getdate()) and
      convert(time, [date]) <= '08:00:00'

这也应该使用索引,因为转换为日期可能是唯一不会阻止使用索引的函数。

答案 1 :(得分:2)

您在正确的轨道上。在昨天的开始和昨天的开始+ 8小时进行一次BETWEEN检查:

date BETWEEN dateadd(day,datediff(day,1,GETDATE()),0) 
         AND dateadd(hour, 8, dateadd(day,datediff(day,1,GETDATE()),0))