Nhận mySQL MONTH () để sử dụng các số 0 ở đầu?


92

Làm cách nào để chỉ định hàm MONTH () của mySQL để trả về '08' thay vì 8 trong truy vấn này?

Tôi muốn công việc sắp xếp theo ngày tháng. Hiện đang nhận được kết quả cho ngày như

2006-9
2007-1
2007-10
2007-11

truy vấn hiện tại:

SELECT COUNT(*), CONCAT(YEAR(`datetime_added`), '-', MONTH(`datetime_added`)) as date FROM `person` WHERE (email = '' OR email IS NULL) 
GROUP BY date 
ORDER BY date ASC

Câu trả lời:


207

Sử dụng những điều sau thay thế:

DATE_FORMAT(`datetime_added`,'%Y-%m')

Giải trình:

DATE_FORMAT()hàm cho phép bạn định dạng ngày tháng mà bạn thích bằng cách sử dụng các từ chỉ định được mô tả trong bảng bên dưới (lấy nguyên văn từ tài liệu ). Vì vậy, một chuỗi định dạng '%Y-%m'có nghĩa là: "Một năm đầy đủ (4 chữ số), theo sau là dấu gạch ngang ( -), theo sau là số tháng có hai chữ số".

Lưu ý rằng bạn có thể chỉ định ngôn ngữ được sử dụng cho tên ngày / tháng bằng cách đặt lc_time_namesbiến hệ thống. Cực kỳ hữu ích. Tham khảo tài liệu để biết thêm chi tiết.

Specifier   Description
%a  Abbreviated weekday name (Sun..Sat)
%b  Abbreviated month name (Jan..Dec)
%c  Month, numeric (0..12)
%D  Day of the month with English suffix (0th, 1st, 2nd, 3rd, …)
%d  Day of the month, numeric (00..31)
%e  Day of the month, numeric (0..31)
%f  Microseconds (000000..999999)
%H  Hour (00..23)
%h  Hour (01..12)
%I  Hour (01..12)
%i  Minutes, numeric (00..59)
%j  Day of year (001..366)
%k  Hour (0..23)
%l  Hour (1..12)
%M  Month name (January..December)
%m  Month, numeric (00..12)
%p  AM or PM
%r  Time, 12-hour (hh:mm:ss followed by AM or PM)
%S  Seconds (00..59)
%s  Seconds (00..59)
%T  Time, 24-hour (hh:mm:ss)
%U  Week (00..53), where Sunday is the first day of the week
%u  Week (00..53), where Monday is the first day of the week
%V  Week (01..53), where Sunday is the first day of the week; used with %X
%v  Week (01..53), where Monday is the first day of the week; used with %x
%W  Weekday name (Sunday..Saturday)
%w  Day of the week (0=Sunday..6=Saturday)
%X  Year for the week where Sunday is the first day of the week, numeric, four digits; used with %V
%x  Year for the week, where Monday is the first day of the week, numeric, four digits; used with %v
%Y  Year, numeric, four digits
%y  Year, numeric (two digits)
%%  A literal “%” character
%x  x, for any x not listed above 

8
Mặc dù không phải những gì anh ta hỏi, nhưng điều này dường như trả lời những gì anh ta nên hỏi.
Jeremy Holovacs

Tại sao ngày trong tháng có thể là 0?
SOFe

Vì 0000-00-00 là ngày hợp lệ (tùy thuộc vào cài đặt)
Mchl

2
@SOFe> Phạm vi cho các chỉ định tháng và ngày bắt đầu bằng 0 do thực tế là MySQL cho phép lưu trữ các ngày không đầy đủ, chẳng hạn như '2014-00-00'. dev.mysql.com/doc/refman/5.6/en/…
kio21

Tuyệt vời, Làm việc như một sự quyến rũ :)
Mizo Games

32

Bạn có thể sử dụng đệm như

SELECT
    COUNT(*), 
    CONCAT(YEAR(`datetime_added`), '-', LPAD(MONTH(`datetime_added`), 2, '0')) as date 
FROM `person` 
WHERE (email = '' OR email IS NULL) 
GROUP BY date 
ORDER BY date ASC

Đáp ứng nhu cầu trong tổ ong. Hàm DATE_FORMAT () không được hỗ trợ trong hive. Câu trả lời của bạn sẽ giúp.
Guangtong Shen


4

MONTH () trả về một số nguyên, vì vậy tất nhiên không có số 0 đứng đầu. Bạn sẽ cần chuyển nó thành một chuỗi, hãy gõ phím trái '0' và lấy 2 ký tự cuối cùng.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.