Y a-t-il un moyen plus simple que d'écrire: p>
Sélectionnez
de Dual P>
3 Réponses :
Si vous n'utilisez pas un ancien mySQL, vous pouvez envelopper cela dans une fonction stockée.
set @LastMonday=LastMonday(); select @Lastmonday;
C'est exactement ce que j'avais "évité" les grands calculs de la Date jusqu'à présent ... j'étais / suis inquiet pour les frais généraux potentiels ...
J'ai depuis ajouté votre suggestion de "mise à jour de performance" à notre codeBase. Cela fait une énorme différence, je m'attendais à ce que la fonction soit appelée qu'une seule fois. (Mais comment est l'optimiseur de savoir que je ne retourne pas de temps en millisecondes ..)
L'astuce ici est que la valeur est calculée une fois et ensuite cache manuellement. Vous pouvez essayer ce que l'optimiseur fait. Il pourrait être assez intelligent de la mettre en cache aussi, mais vous ne pouvez pas vraiment compter sur elle.
Si aujourd'hui est lundi, cela reviendra aujourd'hui
Essayez ceci:
-- Today is 05 April 2013 -- Get Last Monday from MySQL SELECT DATE_FORMAT(LAST_DAY(NOW()) - ((7 + WEEKDAY(LAST_DAY(NOW())) - 7) % 7), '%Y-%m-%d') last_monday; -- Output last_monday ------------- 2013-04-29
Pour moi, ce n'est ni plus simple, ni plus performant que le code dans la question? .. Mais je vais prendre l'indice et donnera une phrase le titre de la question!
Pour moi, ces produits ne sont pas lundi prochains, mais le lundi après cela.
SET @dateCurrent = CURDATE(); SET @dateCurrentDayInWeek = DAYOFWEEK(@dateCurrent) - 2; SET @dateLastMonday = DATE_ADD(@dateCurrent, INTERVAL -@dateCurrentDayInWeek DAY); SELECT @dateLastMonday;
Ce retour ne serait-il pas un jour le dimanche Suivant i> lundi au lieu de la précédente?
Je pense que cela est aussi simple que vous le ferez.