如何在一组日期和时间之间切换

时间:2019-06-06 08:43:20

标签: sql datetime between

我有一组数据,其中一列是日期和时间。我被要求提供表中两个日期范围之间以及这些日期之内的所有数据,只是某些时间范围。例如,我的数据是01/02/2019-10/02/2019之间以及12:00 AM到07:00 AM之间的时间。 (我的实际日期范围超过几个月,仅以这些日期为例)

我可以将日期和时间转换为两个不同的列,以将它们分开,如下所示:

select

name
,dateandtimetest
,cast(dateandtimetest as date) as JustDate
,cast(dateandtimetest as time) as JustTime
INTO #Test01
from [dbo].[TestTable]

我将其放入测试表中,以便可以查看是否可以在JustTime列上使用between函数,因为我知道我可以在日期上进行between。我的想法是将它们放在两个单独的表中完成,然后执行inner join以获得我需要的结果

from #Test01
WHERE justtime between '00:00' and '05:00'

上面的代码不会给我我需要的数据。我为此一直在绞尽脑汁,所以任何帮助将不胜感激!

我用来尝试获取正确代码的测试表如下所示:

|Name       | DateAndTimeTest   
-----------------------------------------| 
|Lauren     | 2019-02-01 04:14:00   |
|Paul       | 2019-02-02 08:20:00   |
|Bill       | 2019-02-03 12:00:00   |
|Graham     | 2019-02-05 16:15:00   |
|Amy        | 2019-02-06 02:43:00   |
|Jordan     | 2019-02-06 03:00:00   |
|Sid        | 2019-02-07 15:45:00   |
|Wes        | 2019-02-18 01:11:00   |
|Adam       | 2019-02-11 11:11:00   |
|Rhodesy    | 2019-02-11 15:16:00   |

我现在已经尝试使用以下代码获取数据以显示一个日期之间的时间信息,但是现在我需要使这段代码在3个月内的每个日期运行

select * 

from dbo.TestTable

where DateAndTimeTest between '2019-02-11 00:00:00' and '2019-02-11 08:30:00'

1 个答案:

答案 0 :(得分:1)

您可以使用类似于以下内容的SQL:

select *
from dbo.TestTable
where (CAST(DateAndTimeTest as date) between '2019-02-11' AND '2019-02-11') AND 
      (CAST(DateAndTimeTest as time) between '00:00:00' and '08:30:00')

以上查询将返回所有记录,其中DateAndTimeTest值的日期范围为2019-02-11至2019-02-11,时间为12AM至8:30 AM。