首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用SQL语句计算每月的第三个星期一?

如何使用SQL语句计算每月的第三个星期一?
EN

Stack Overflow用户
提问于 2012-01-12 19:39:01
回答 9查看 11.9K关注 0票数 5

我需要触发一个通知。此通知必须在每个月的第三个星期一触发。

EN

回答 9

Stack Overflow用户

发布于 2012-01-13 00:54:15

代码语言:javascript
复制
SELECT 
(
  DAYOFWEEK(NOW()) = 2  
  AND 
  DAYOFMONTH(NOW()) BETWEEN 15 AND 21
) 
AS send_notice_today;
票数 4
EN

Stack Overflow用户

发布于 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(星期四)

票数 1
EN

Stack Overflow用户

发布于 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)))

然后你可以简单地说像这样

代码语言:javascript
复制
SELECT * FROM dataTable WHERE WEEKNAME(your_date_field) = "3rd Wednesday"

..。我纠结于如何从工作日返回4/5,并决定在理论上为两者添加"/Last“,即这是”足够好“的,如果一个人想测试4,5或最后。使用此命令,您可以执行以下操作:

代码语言:javascript
复制
SELECT * FROM dataTable WHERE WEEKNAME(your_date_field) LIKE "%Last%"
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8834451

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档