Get mySQL MONTH() to use leading zeros?

在这个查询中,如何指定 mySQL 的 MONTH ()函数返回“08”而不是8?

I'd like the sort to work datewise. Currently getting results for date like

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

当前查询:

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
102583 次浏览

使用以下代替:

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

Explanation:

DATE_FORMAT()函数允许您使用下表中描述的说明符(从 文件中逐字取得)以任何方式格式化日期。因此,格式化字符串 '%Y-%m'的意思是: “一个完整的年份(4位数) ,后面跟一个破折号(-) ,后面跟一个两位数的月份号”。

注意,可以通过设置 lc_time_names系统变量来指定日/月名称所使用的语言。非常有用。有关详细信息,请参阅 文件

Specifier 描述
% a 工作日简称(星期日. . 星期六)
% b 月名缩写(一月,十二月)
% c 月份,数字(0. . 12)
%D 带英文后缀的月日(0,1,2,3,...)
% d 月份的日期,数字(00. .31)
% e 月份的日期,数字(0. .31)
% f 微秒(000000. . 999999)
%H 一小时(00. .23)
%h Hour (01..12)
% I 一小时(01. . 12)
% i 分钟,数字(00. .59)
% j 年份日(001. . 366)
% k 一小时(0. . 23)
% l Hour (1..12)
% M 月份名称(一月. . 十二月)
% m 月份,数字(00. . 12)
% p 上午或下午
% r Time, 12-hour (hh:mm:ss followed by AM or PM)
% S 秒(00..59)
% s 秒(00..59)
% T 时间,24小时(hh: mm: ss)
% U WEEK (00..53) ,其中周日是一周中的第一天; WEEK ()模式0
% u WEEK (00..53) ,其中周一是一周中的第一天; WEEK ()模式1
%V Week (01..53), where Sunday is the first day of the week; WEEK() mode 2; used with %X
%v WEEK (01..53) ,其中周一是一周的第一天; WEEK ()模式3; 与% x 一起使用
% W 工作日名称(星期日. . 星期六)
% w 星期几(0 = 星期日. . 6 = 星期六)
% X 周日为一周第一天的周的年份,数字,四位数; 与% V 一起使用
% x 一周的年份,其中周一是一周的第一天,数字,四位数字; 与% v 一起使用
% Y 年,数字,四位数
% y 年份,数字(两位数字)
%% 字面上的% 字符
% x 对于上面没有列出的任何“ x”

MONTH ()返回一个整数,所以当然没有前导零。您需要将其转换为一个字符串,在左边填充“0”,并取最后2个字符。

你可以像这样使用填充

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
DATE_FORMAT(`datetime_added`,'%Y - %m')

使用 洛杉矶警局函数也可以

LPAD(MONTH(your_date_column_here),2,'0')

请参阅下面使用当前日期的示例

enter image description here