Voici une version simplifiée utilisant uniquement les calculs de date :
SELECT LAST_DAY(NOW()) - ((7 + WEEKDAY(LAST_DAY(NOW())) - 4) % 7);
Selon comment NOW()
est évalué (une ou deux fois par instruction), vous voudrez peut-être toujours l'envelopper dans une fonction et stocker le résultat de NOW()
dans une variable, puis utilisez la variable pour le LAST_DAY(var)
call, pour éviter une condition de concurrence où le mois se renouvelle entre les appels à NOW()
.