使用日期范围选择值,但还需要使用小时范围来确定是否应选择记录。日期范围和时间范围不一定相关联。
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
我收到转化错误。
答案 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
将阻止它。