尝试从一周的某些天中选择数据,例如星期一至星期五,但是星期五需要在特定时间之前,例如4:30 pm。这是从多年的数据中提取的,因此它更像是对日期范围的过滤。当前,以下内容仅用于过滤一周中的某些天:
SELECT *
FROM sometable
WHERE DAYNAME(created) IN ('Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday');
但是它需要添加一个条件以不提取星期五下午4:30之后创建的数据。像这样:
DAYNAME(created) = "Friday" AND HOUR(created) <= 16 AND MINUTE(created) <= 30
将以上内容添加到where
中后,它只会在星期五下午4点之前和每小时30分钟之前获取星期五。
有什么建议吗?
答案 0 :(得分:1)
这样可以解决您的问题吗?
SELECT *
FROM sometable
WHERE DAYNAME(created) IN ('Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday')
AND HOUR(created) <= CASE WHEN DAYNAME(created) = "Friday" THEN 16 ELSE 24 END;
答案 1 :(得分:1)
一种解决方案是为星期日添加一组单独的条件。我也建议您使用WEEKDAY()
(从星期一开始的一周中的天数),因为这样可以使您使用比较运算符BETWEEN
缩短查询时间:
SELECT *
FROM sometable
WHERE
WEEKDAY(created) BETWEEN 0 AND 3
OR (WEEKDAY(created) = 4 AND HOUR(created) <= 16)
如果要使用下午4:30而不是下午4点,则可以使用略有不同的方法,并提取日期时间的整个时间部分进行比较:
SELECT *
FROM sometable
WHERE
WEEKDAY(created) BETWEEN 0 AND 3
OR (WEEKDAY(created) = 4 AND CONVERT(created, time) <= '16:30')