在MySQL查询中不包括星期几

时间:2019-10-09 21:43:19

标签: mysql sql

尝试从一周的某些天中选择数据,例如星期一至星期五,但是星期五需要在特定时间之前,例如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分钟之前获取星期五。

有什么建议吗?

2 个答案:

答案 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')