T-SQL:转换(日期时间)以包含/排除某些小时

时间:2015-10-19 19:00:59

标签: sql sql-server-2008 tsql date datetime

使用日期范围选择值,但还需要使用小时范围来确定是否应选择记录。日期范围和时间范围不一定相关联。

 game_time (between 6 am and 6 pm)

直接在语句和日期部分之间进行了尝试,但无法获取任何内容来捕获我们需要的内容。

create table gametime(name varchar, start_time datetime, end_time datetime)

insert assorted name, start_times and end_times

期望的结果

  name    start_time    end_time
  name1   8:00 AM         10:00 AM
  name2   8:00 AM         11:30 AM
  name3   4:00 PM           5:30 PM
  name4   6:00 PM           9:00 PM

datetime用于存储,但在演示文稿中不需要..在演示中只需要时间。

所选游戏只能在早上6:00到下午6:00之间开始。

任何和所有建议和见解都赞赏......

使用

LTRIM(RIGHT(CONVERT(VARCHAR(20), start_time, 100), 7)) 

获取正确的演示格式,

但是当我尝试使用

LTRIM(RIGHT(CONVERT(VARCHAR(20), start_time, 100), 7)) > 6

我收到转化错误。

3 个答案:

答案 0 :(得分:3)

我会使用DATEPART而不是依赖于转换/比较字符串:

WHERE DATEPART(hour,start_time) BETWEEN 6 AND 18

答案 1 :(得分:1)

尝试CONVERT(VARCHAR(5),start_time,108)BETWEEN '06:00'和'18:00'。现在你正在尝试将字符串与整数进行比较。

答案 2 :(得分:0)

以其他方式,只要您使用的是SQL Server 2008或更高版本并且可以使用TIME类型:

SELECT *
FROM gametime
WHERE CAST(start_time AS TIME) BETWEEN '06:00:00' and '18:00:00'

当你的时间范围没有固定到精确的小时时,这可以更灵活一点。它也是sarg-able - 即它将使用索引,其中调用DATEPART将阻止它。