Câu trả lời thích nhất cho đến nay trên tàu này trông như thế này ở dạng cơ bản của nó:
SELECT STR_TO_DATE('201003 Monday', '%X%V %W');
Đây là một câu trả lời tốt để bắt đầu, nhưng nó phá vỡ trong một số ngày khi bạn bắt đầu đặt nó để sử dụng trong conjuction với tuần() chức năng trừ khi bạn thêm một số logic thêm .
Dưới đây là một chặng đường dài, phiên bản lộn xộn trong những điều tương tự, nhưng mà dường như để làm việc trên tất cả các ngày (BTW ngày hiện tại được xây dựng vào asnwer này):
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');
mớ hỗn độn này xử lý các vấn đề phát sinh khi năm trôi qua vào những ngày nhất định trong tuần. Ví dụ: 2011 bắt đầu vào thứ Bảy, do đó, chủ nhật bắt đầu tuần là vào năm trước. Đây là lựa chọn với các ví dụ mã hóa cứng:
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'
Tất cả những gì đã nói, Tôi thích những người khác đã đăng nội dung như thế này
SELECT
adddate(curdate(), INTERVAL 1-DAYOFWEEK(curdate()) DAY) WeekStart,
adddate(curdate(), INTERVAL 7-DAYOFWEEK(curdate()) DAY) WeekEnd;
Phương pháp này dường như chỉ hoạt động tốt ở tất cả các ngày mà không có sự lộn xộn!
Nó hoạt động hoàn hảo. Cảm ơn – davykiash
Khi sử dụng chế độ tuần 3 (tiêu chuẩn ISO, qv http://stackoverflow.com/questions/11788885/), sau đó CHỌN STR_TO_DATE ('201003 Thứ hai', '% X% V% W') sẽ cung cấp thứ hai sau tuần! – ChrisV
Tôi nghĩ nó không chính xác. Hãy thử chạy SELECT STR_TO_DATE ('201402 Chủ Nhật', '% X% V% W'), STR_TO_DATE ('201402 Thứ Hai', '% X% V% W') - bạn sẽ thấy rằng đó không phải là chủ nhật của tuần thứ 2 và thứ hai của tuần thứ 2 - đó là thứ hai chủ nhật và thứ hai thứ hai của YEAR – 1nstinct