La réponse la plus aimé jusqu'à présent sur cette carte ressemble à ceci sous sa forme de base:
SELECT STR_TO_DATE('201003 Monday', '%X%V %W');
Ceci est une bonne réponse pour commencer, mais il tombe en panne quelques jours quand vous commencez à le mettre à utiliser conjointement avec la fonction semaine() sauf si vous ajoutez une logique supplémentaire .
Voici une version longue et désordonnée de la même chose, mais qui semble fonctionner tous les jours (BTW la date actuelle est construit dans ce asnwer):
SELECT STR_TO_DATE(
(IF(CAST(WEEK(NOW(),0) AS UNSIGNED) = 0,
(CONCAT(
CAST((CAST(YEAR(NOW()) AS UNSIGNED) - 1) AS CHAR),
'52 Sunday')),
(CONCAT(
CAST(YEAR(NOW()) AS CHAR),
IF(CAST(WEEK(NOW(),0) AS UNSIGNED) < 10,'0',''),
CAST(WEEK(NOW(),0) AS CHAR),
' Sunday')))),
'%X%V %W');
Ce gâchis gère les problèmes qui se posent quand l'année arrive à certains jours de la semaine. Par exemple, 2011 a commencé un samedi, alors le dimanche qui a commencé la semaine était l'année précédente. Voici la sélection avec des exemples codés en dur:
SELECT STR_TO_DATE(
(IF(CAST(WEEK('2011-01-01',0) AS UNSIGNED) = 0,
(CONCAT(
CAST((CAST(YEAR('2011-01-01') AS UNSIGNED) - 1) AS CHAR),
'52 Sunday')),
(CONCAT(
CAST(YEAR('2011-01-01') AS CHAR),
IF(CAST(WEEK('2011-01-01',0) AS UNSIGNED) < 10,'0',''),
CAST(WEEK('2011-01-01',0) AS CHAR),
' Sunday')))),
'%X%V %W');
yeilds >> '2010-12-26'
SELECT STR_TO_DATE(
(IF(CAST(WEEK('2011-01-02',0) AS UNSIGNED) = 0,
(CONCAT(
CAST((CAST(YEAR('2011-01-02') AS UNSIGNED) - 1) AS CHAR),
'52 Sunday')),
(CONCAT(
CAST(YEAR('2011-01-02') AS CHAR),
IF(CAST(WEEK('2011-01-02',0) AS UNSIGNED) < 10,'0',''),
CAST(WEEK('2011-01-02',0) AS CHAR),
' Sunday')))),
'%X%V %W');
yeilds >> '2011-01-02'
Tout cela étant dit, J'aime l'autre asnwer affichée qui ressemble à ce
SELECT
adddate(curdate(), INTERVAL 1-DAYOFWEEK(curdate()) DAY) WeekStart,
adddate(curdate(), INTERVAL 7-DAYOFWEEK(curdate()) DAY) WeekEnd;
cette méthode semble fonctionner aussi bien sur toutes les dates sans le désordre!
Cela a juste fonctionné parfaitement. Merci – davykiash
Lors de l'utilisation du mode semaine 3 (norme ISO, qv http://stackoverflow.com/questions/11788885/), alors SELECT STR_TO_DATE ('201003 Monday', '% X% V% W') donnera le lundi suivant la semaine! – ChrisV
Je pense que ce n'est pas correct. Essayez d'exécuter SELECT STR_TO_DATE ('201402 dimanche', '% X% V% W'), STR_TO_DATE ('201402 lundi', '% X% V% W') - vous verrez que ce n'est pas dimanche de la 2ème semaine et lundi de la 2ème semaine - il est deuxième dimanche et 2ème lundi de l'année – 1nstinct