Search code examples
mysqlmysql-event

MySQL event weekly but only first week every month?


I need to run an event weekly (every 1st Friday of the month) and another event every Friday other than the first Friday of the month. All I could think of was something like

IF WEEKDAY()=4 AND DAYOFMONTH() BETWEEN 1 AND 7 THEN ....

and

IF WEEKDAY()=4 AND DAYOFMONTH() BETWEEN 8 AND 31 THEN ....

But is there a better/more neat query that?


Solution

  • SET @x := '2018-06-01';
    
    SELECT CASE WHEN WEEKDAY(@x) = 4 
                THEN CASE WHEN DAYOFMONTH(@x) < 8 
                          THEN 'FIRST FRIDAY' 
                          ELSE 'SOME OTHER FRIDAY' END 
                ELSE 'NOT FRIDAY' END x;
    +--------------+
    | x            |
    +--------------+
    | FIRST FRIDAY |
    +--------------+
    
    
    
    
    SET @x := '2018-06-08';
    
    SELECT CASE WHEN WEEKDAY(@x) = 4 
                THEN CASE WHEN DAYOFMONTH(@x) < 8 
                          THEN 'FIRST FRIDAY' 
                          ELSE 'SOME OTHER FRIDAY' END 
                ELSE 'NOT FRIDAY' END x;
    +-------------------+
    | x                 |
    +-------------------+
    | SOME OTHER FRIDAY |
    +-------------------+
    
    SET @x := '2018-06-07';
    
    SELECT CASE WHEN WEEKDAY(@x) = 4 
                THEN CASE WHEN DAYOFMONTH(@x) < 8 
                     THEN 'FIRST FRIDAY' 
                     ELSE 'SOME OTHER FRIDAY' END 
                ELSE 'NOT FRIDAY' END x;
    +------------+
    | x          |
    +------------+
    | NOT FRIDAY |
    +------------+