2012-06-11 36 views
5

Tôi muốn có số tuần và năm, cho một ngày nhất định, từ MySQL với các quy tắc sau:Kết thúc năm với Mysql

  • Nếu ngày là vào cuối năm nay, nhưng trong tuần đầu tiên của năm tiếp theo, tôi cần trả về 1 là số tuần.
  • Nếu ngày vào đầu năm, nhưng trong tuần cuối cùng của năm trước, tôi cần trả về 52 (hoặc 53) làm số tuần.

Tôi đã đọc hàm tuần trong MySQL nhưng tôi không thể nhận được kết quả mình muốn.

Date and Time Functions: WEEK(date[,mode])

tôi trên lịch Pháp, vì vậy tôi phải bắt đầu tuần vào thứ hai và tuần 1 là tuần đầu tiên với hơn 3 ngày trong năm nay.

Vì vậy, tôi chỉ có thể sử dụng tùy chọn 1 và 3.

Khi tôi viết các truy vấn sau đây:

  • chọn tuần ('2012/12/31', 3), kết quả là 1

  • chọn tuần ('2012/12/31', 1), kết quả là 53

Khi tôi thử nghiệm trên 1 Tháng 1 năm 2016:

  • chọn tuần ('2016/01/01', 3), kết quả là 53

  • chọn tuần ('2016/01/01', 1), kết quả là 0

Tùy chọn 1 không thể sử dụng được, vì tôi không thể phát hiện ra rằng 2012-12-31 là trong năm tiếp theo.

Lựa chọn 3 có thể được sử dụng, nhưng tôi có thêm hai miếng của logic: nếu weeknumber = 1 và tháng = 12, năm + 1 và nếu weekumber = 53 và tháng = 1 sau đó năm - 1

Liệu ai đó có một giải pháp tốt hơn?

Kính trọng

+0

Tôi không chính xác rõ ràng về quy tắc của bạn, nhưng những gì về chế độ 7? – deadly

+0

chế độ 7 là "với một thứ hai trong năm nay", vì vậy tôi không thể sử dụng nó ... nó không tuân theo các quy tắc của Pháp. theo nhu cầu của tôi nếu 1/1/2013 là tuần thứ 1 và đó là một ngày thứ ba, tôi muốn có 12/31/2011 tuần 1 + năm 2012. Tôi nghĩ rằng tôi phải sử dụng IF –

Trả lời

2

Ok, tôi nghĩ mình có được những gì bạn đang cố gắng làm bây giờ.

Như các tài liệu nói:

Chúng tôi quyết định trở về 0 thay vì chúng tôi muốn các chức năng để trở “số tuần trong năm nhất định.”

Nếu bạn muốn số tuần trong năm tuần đó là, họ đề nghị sử dụng các YEARWEEK() function, trong đó có các đối số chế độ tương tự như WEEK():

Nếu bạn muốn kết quả để được đánh giá đối với các năm có chứa ngày đầu tiên của tuần cho ngày cụ thể với ... sử dụng YEARWEEK() chức năng:

mysql> SELECT YEARWEEK('2000-01-01'); 
     -> 199952 
mysql> SELECT MID(YEARWEEK('2000-01-01'),5,2); 
     -> '52' 

Vì vậy, một số ví dụ về những gì bạn muốn sử dụng:

mysql> SELECT MID(YEARWEEK('2012-1-1',3),5,2) 
     -> '52' 
mysql> SELECT MID(YEARWEEK('2012-12-31',3),5,2) 
     -> '01' 
+0

một lời cảm ơn lớn! –

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