我需要触发一个通知。此通知必须在每个月的第三个星期一触发。
发布于 2012-01-13 00:54:15
SELECT
(
DAYOFWEEK(NOW()) = 2
AND
DAYOFMONTH(NOW()) BETWEEN 15 AND 21
)
AS send_notice_today;发布于 2012-01-12 19:47:15
尝试使用Try using和Try using函数。http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_dayofweek
你可以通过操作mod 7检查从每月1号到curdate()有多少周(),并且星期应该是5(星期四)
发布于 2018-05-02 14:09:51
因此,更一般的情况下,如果您可以使用以下命令获得日期的"week of month“:
(FLOOR((DAYOFMONTH(given) - 1) / 7)) AS 'week_of_month‘
我认为它为给定日期提供了精确的以0为基数的周索引。然后,您可以使用该值来查找任意n个,如下所示:
其中(week_of_month) =n,工作日= { weekday }
您也可以通过以下方式使用上面的代码来获取"last {weekday}“:
其中(week_of_month >= 4) and weekday = {weekday}
请注意,week_of_month的范围可以是0到5(例如,第一天在星期六的31天的月份将有第6周的第31天(5作为基于0的索引))
希望这能帮到你。
好的再来一点……您可以将上述内容定义为如下所示的函数:
CREATE FUNCTION WEEKOFMONTH(given date) RETURNS int DETERMINISTIC RETURN (FLOOR((DAYOFMONTH(given) - 1) / 7))
并添加另一个函数:
CREATE FUNCTION WEEKNAME(given date) RETURNS text CHARACTER SET utf8 COLLATE utf8_unicode_ci DETERMINISTIC RETURN (CONCAT(ELT(WEEKOFMONTH(given)+1,'1st ','2nd ','3rd ','4th/Last ','5th/Last '),DAYNAME(given)))
然后你可以简单地说像这样
SELECT * FROM dataTable WHERE WEEKNAME(your_date_field) = "3rd Wednesday"..。我纠结于如何从工作日返回4/5,并决定在理论上为两者添加"/Last“,即这是”足够好“的,如果一个人想测试4,5或最后。使用此命令,您可以执行以下操作:
SELECT * FROM dataTable WHERE WEEKNAME(your_date_field) LIKE "%Last%"https://stackoverflow.com/questions/8834451
复制相似问题