让 mySQL MONTH() 使用前导零?

问题描述 投票:0回答:6

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

我希望排序按日期进行。 目前正在获取类似日期的结果

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
mysql sql date
6个回答
268
投票

请使用以下内容:

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

说明:

DATE_FORMAT()
函数可让您使用下表中描述的说明符以您喜欢的方式格式化日期(逐字取自文档)。因此,格式字符串
'%Y-%m'
的意思是:“完整的年份(4 位数字),后跟破折号 (
-
),后跟两位数的月份数字”。

请注意,您可以通过设置

lc_time_names
系统变量来指定日/月名称使用的语言。非常有用。请参阅文档了解更多详细信息。

一起使用 一起使用 一起使用
说明符 描述
%a 工作日缩写名称(Sun..Sat)
%b 月份名称缩写(Jan..Dec)
%c 月份,数字 (0..12)
%D 带有英文后缀的月份日期(0th, 1st, 2nd, 3rd, …)
%d 一月中的某一天,数字 (00..31)
%e 一月中的第几天,数字 (0..31)
%f 微秒(000000..999999)
%H 小时 (00..23)
%h 小时 (01..12)
%我 小时 (01..12)
%我 分钟,数字 (00..59)
%j 一年中的某一天(001..366)
%k 小时 (0..23)
%l 小时(1..12)
%M 月份名称(一月..十二月)
%m 月份,数字 (00..12)
%p 上午或下午
%r 时间,12 小时(hh:mm:ss 后跟 AM 或 PM)
%S 秒(00..59)
%s 秒(00..59)
%T 时间,24 小时(hh:mm:ss)
%U 周 (00..53),其中星期日是一周的第一天; WEEK() 模式 0
%u 周 (00..53),其中星期一是一周的第一天; WEEK() 模式 1
%V 周 (01..53),其中星期日是一周的第一天; WEEK() 模式 2;与%X
%v 周 (01..53),其中星期一是一周的第一天; WEEK() 模式 3;与%x一起使用
%W 工作日名称(星期日..星期六)
%w 一周中的哪一天(0=星期日..6=星期六)
%X 一周的年份,其中星期日是一周的第一天,数字,四位数字;与%V
%x 星期的年份,其中星期一是一周的第一天,数字,四位数字;与 %v
%Y 年份,数字,四位数字
%y 年份,数字(两位数)
%% 字面上的 % 字符
%x x,对于上面未列出的任何“x”

43
投票

您可以像这样使用填充

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

7
投票

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


6
投票
DATE_FORMAT(`datetime_added`,'%Y - %m')

1
投票

使用LPAD功能也可以

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

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

enter image description here


0
投票

请使用 DATE_FORMAT(CURRENT_DATE(),"%m") 获取两位数月份

© www.soinside.com 2019 - 2024. All rights reserved.