2012-08-03 19 views
31

Chế độ nào cho chức năng WEEK() của MySQL mang lại hiệu suất ISO 8601 week of the year? Đối số 2 của WEEK() đặt chế độ theo biểu đồ này:Chế độ nào cho MySQL WEEK() tuân theo ISO 8601

+--------------------------------------------------------------------+ 
| Mode | First day of week | Range | Week 1 is the first week ... | 
|------+-------------------+-------+---------------------------------| 
| 0 | Sunday   | 0-53 | with a Sunday in this year  | 
|------+-------------------+-------+---------------------------------| 
| 1 | Monday   | 0-53 | with more than 3 days this year | 
|------+-------------------+-------+---------------------------------| 
| 2 | Sunday   | 1-53 | with a Sunday in this year  | 
|------+-------------------+-------+---------------------------------| 
| 3 | Monday   | 1-53 | with more than 3 days this year | 
|------+-------------------+-------+---------------------------------| 
| 4 | Sunday   | 0-53 | with more than 3 days this year | 
|------+-------------------+-------+---------------------------------| 
| 5 | Monday   | 0-53 | with a Monday in this year  | 
|------+-------------------+-------+---------------------------------| 
| 6 | Sunday   | 1-53 | with more than 3 days this year | 
|------+-------------------+-------+---------------------------------| 
| 7 | Monday   | 1-53 | with a Monday in this year  | 
+--------------------------------------------------------------------+ 

Một trong các chế độ này có cung cấp tuần ISO 8601 trong năm không?

+6

+1 cho tính thân thiện với tìm kiếm (Tôi đã googled cho "mysql week ISO-8601" và câu hỏi này là kết quả đầu tiên) – Hnatt

Trả lời

53

Trong đánh số tuần ISO, thứ hai là ngày đầu tiên trong tuần, để thu hẹp nó xuống một trong các chế độ được đánh số lẻ.

Per Wikipedia:

Có giới thiệu lẫn nhau tương đương với tuần 01:

  • tuần với Thứ Năm đầu tiên của năm trong nó (định nghĩa ISO chính thức),
  • tuần với 4 Tháng 1 trong đó,
  • tuần đầu tiên với phần lớn (bốn hoặc nhiều) ngày trong năm bắt đầu và
  • tuần bắt đầu từ thứ Hai trong khoảng thời gian từ ngày 29 tháng 12 đến ngày 4 tháng 1.

Thứ ba của những trận đấu giới thiệu "với hơn 3 ngày trong năm nay" từ bảng trên, vì vậy bây giờ chúng tôi đã thu hẹp nó xuống 1 hoặc 3.

Cuối cùng, vẫn từ Wikipedia (nhấn mạnh thêm):

Nếu 1 tháng 1 vào thứ Hai, thứ Ba, thứ Tư hoặc thứ Năm, vào tuần thứ 1, thứ 7 hoặc chủ nhật, vào tuần thứ 6, thứ 7 hoặc Chủ Nhật, đó là vào tuần thứ 52 hoặc 53 của năm trước (không có tuần 00).

Do đó, dải ô phải là 1-53, không phải 0-53. Điều này có nghĩa là chế độ phù hợp là chế độ .

+0

Để xác minh rằng câu trả lời này là chính xác, hãy tham khảo các định nghĩa chính thức của "tuần lịch" và "số tuần dương lịch" trong các phần ISO 8601 2.2.8 và 2.2.10. Để làm rõ lý do tại sao không có tuần 0, "số tuần dương lịch" được định nghĩa là "số thứ tự" và số thứ tự bắt đầu tại 1. – TachyonVortex

+0

Cảm ơn bạn! .... – Ken

15

Tôi biết câu hỏi này là cũ, nhưng nó là SEO vị trí tốt :) Vì vậy, chỉ để chắc câu trả lời hoàn chỉnh hơn - khi hiển thị số năm và tuần, bạn có thể sử dụng này:

DATE_FORMAT(your_date_here, "%x-%v") 

nó sẽ tạo ra số tuần iso cho "% v" (1-53) và số năm chính xác cho "% x".

+2

Rất đẹp. Thật tuyệt vời khi báo cáo! Cảm ơn! – Ross

0

Đối với Pháp bạn cần phải đặt trong tập tin /etc/mysql/my.cnf § [mysqld]: default_week_format = 3

Chú ý: công việc dont cho nămTuần, nhu cầu bổ sung chế độ = 3 CHỌN nămTuần (CURDATE (), 3)

Đổ la France vous devez modifier ou ajouter cette ligne dans le paragraphe [mysqld] du fichier /etc/mysql/my.cnf: default_week_format = 3 Cela Permet à la fonction TUẦN de retourner les vraies numéros de semaines Fra nçaise. Chú ý đổ la fonction YEARWEEK il faut impérativement ajouter le mode à 3 CHỌN YEARWEEK (CURDATE(), 3)

+0

Tôi đã quan tâm để đọc bài đăng của bạn, nhưng tôi không thể đọc được tiếng Pháp. [Stack Overflow có vẻ có sở thích tiếng Anh] (http://meta.stackexchange.com/questions/13676/is-english-required-on-stack-overflow) – steampowered

Các vấn đề liên quan