odpowiedź najbardziej lubiany do tej pory ta płyta wygląda tak w swojej podstawowej formie:
SELECT STR_TO_DATE('201003 Monday', '%X%V %W');
to jest dobra odpowiedź na początek, ale rozkłada się na kilka dni po uruchomieniu, aby umieścić go używać w połączeniu z funkcją tygodni(), chyba że dodasz jakąś dodatkową logikę .
Oto długo, niechlujny wersja tego samego, ale które wydaje się działać na wszystkich dni (BTW bieżąca data jest wbudowanych w tym 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');
ten bałagan dotyka problemów, które powstają kiedy rok przewraca się w pewne dni tygodnia. Na przykład rok 2011 rozpoczął się w sobotę, więc niedziela, która rozpoczęła się w tym tygodniu, miała miejsce w zeszłym roku. Oto wybierz z twardymi kodowanych przykładów:
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'
Wszystko, co powiedział, Lubię drugi asnwer pisał, że wygląda to
SELECT
adddate(curdate(), INTERVAL 1-DAYOFWEEK(curdate()) DAY) WeekStart,
adddate(curdate(), INTERVAL 7-DAYOFWEEK(curdate()) DAY) WeekEnd;
metoda ta wydaje się działać równie dobrze na wszystkich dat, bez bałaganu!
Po prostu działało idealnie. Dziękujemy – davykiash
Podczas korzystania z trybu tygodniowego 3 (standard ISO, qv http://stackoverflow.com/questions/11788885/), a następnie WYBIERZ STR_TO_DATE ("201003 poniedziałek", "% X% V% W") otrzymasz w poniedziałek tydzień! – ChrisV
Myślę, że to nie jest poprawne. Spróbuj uruchomić SELECT STR_TO_DATE ('201402 Sunday', '% X% V% W'), STR_TO_DATE ('201402 Monday', '% X% V% W') - zobaczysz, że nie jest to niedziela drugiego tygodnia i poniedziałek 2-go tygodnia - jest druga niedziela i drugi poniedziałek roku – 1nstinct