摘要:在本教程中,您将学习如何使用MySQL DATE_FORMAT函数根据特定格式格式化日期值。
MySQL DATE_FORMAT
函数简介
要将日期值格式化为特定格式,请使用DATE_FORMAT
函数。 DATE_FORMAT
函数的语法如下:
DATE_FORMAT(date,format)
Code language: SQL (Structured Query Language) (sql)
DATE_FORMAT
函数接受两个参数:
date
:是要格式化的有效日期值format
:是由预定义说明符组成的格式字符串。每个说明符前面都有一个百分比字符 (%
)。有关预定义说明符的列表,请参阅下表。
DATE_FORMAT
函数返回一个字符串,其字符集和排序规则取决于客户端连接的设置。
下表说明了可用于构造日期格式字符串的说明符及其含义:
说明符 | 意义 |
---|---|
%A | 工作日的三个字符缩写名称,例如 Mon、Tue、Wed 等。 |
%b | 三字符缩写月份名称,例如 Jan、Feb、Mar 等。 |
%C | 数字月份,例如 1、2、3…12 |
%D | 带英文后缀的月份日期,例如 0th、1st、2nd 等。 |
%d | 如果是 1 个数字,则带有前导零的月份中的某天,例如 00、01,02、…31 |
%e | 月份中没有前导零的日期,例如 1,2,…31 |
%F | 000000..999999 范围内的微秒 |
%H | 24 小时格式的小时,带前导零,例如 00..23 |
%H | 12 小时格式的小时,带前导零,例如 01、02…12 |
%我 | 与%h相同 |
%我 | 带有前导零的分钟,例如 00、01、…59 |
%j | 一年中的某一天,带前导零,例如 001,002,…366 |
%k | 24 小时格式的小时,不带前导零,例如 0,1,2…23 |
%l | 12 小时格式的小时,不带前导零,例如 1,2…12 |
%M | 完整的月份名称,例如一月、二月、…十二月 |
%m | 带前导零的月份名称,例如 00,01,02,…12 |
%p | AM 或 PM,取决于其他时间说明符 |
%r | 12 小时格式的时间 hh:mm:ss AM 或 PM |
%S | 带前导零的秒 00,01,…59 |
%s | 与%S相同 |
%T | 24 小时格式的时间 hh:mm:ss |
%U | 当一周的第一天是星期日时,周数带有前导零,例如 00,01,02…53 |
%u | 当一周的第一天是星期一时,周数带有前导零,例如 00,01,02…53 |
%V | 与%U相同;它与 %X 一起使用 |
%v | 与%u相同;它与 %x 一起使用 |
%W | 工作日的全称,例如星期日、星期一、…、星期六 |
%w | 工作日数量(0=星期日,1=星期一等) |
%X | 以四位数表示一周的年份,其中一周的第一天是星期日;经常与%V一起使用 |
%X | 一周的年份,其中一周的第一天是星期一,四位数字;与 %v 一起使用 |
%Y | 四位数年份,例如 2000 和 2001。 |
%y | 两位数年份,例如 10、11 和 12。 |
%% | 向输出添加百分比 (%) 字符 |
以下是一些常用的日期格式字符串:
DATE_FORMAT 字符串 | 格式化日期 |
---|---|
%Y-%m-%d | 2013-07-04 |
%e/%c/%Y | 2013年4月7日 |
%c/%e/%Y | 2013年7月4日 |
%d/%m/%Y | 2013年4月7日 |
%m/%d/%Y | 2013年7月4日 |
%e/%c/%Y %H:%i | 2013年4月7日 11:20 |
%c/%e/%Y %H:%i | 2013年7月4日 11:20 |
%d/%m/%Y %H:%i | 2013年4月7日 11:20 |
%m/%d/%Y %H:%i | 2013年7月4日 11:20 |
%e/%c/%Y %T | 2013年4月7日 11:20 |
%c/%e/%Y %T | 2013年7月4日 11:20 |
%d/%m/%Y %T | 2013年4月7日 11:20 |
%m/%d/%Y %T | 2013年7月4日 11:20 |
%a %D %b %Y | 2013 年 7 月 4 日星期四 |
%a %D %b %Y %H:%i | 2013 年 7 月 4 日星期四 11:20 |
%a %D %b %Y %T | 2013 年 7 月 4 日星期四 11:20:05 |
%a %b %e %Y | 2013 年 7 月 4 日星期四 |
%a %b %e %Y %H:%i | 2013 年 7 月 4 日星期四 11:20 |
%a %b %e %Y %T | 2013 年 7 月 4 日星期四 11:20:05 |
%W %D %M %Y | 2013 年 7 月 4 日星期四 |
%W %D %M %Y %H:%i | 2013 年 7 月 4 日 星期四 11:20 |
%W %D %M %Y %T | 2013 年 7 月 4 日星期四 11:20:05 |
%l:%i %p %b %e, %Y | 2013年7月4日 11:20 |
%M %e,%Y | 2013 年 7 月 4 日 |
%a、%d %b %Y %T | 2013 年 7 月 4 日星期四 11:20:05 |
MySQL DATE_FORMAT
示例
让我们看一下示例数据库中的orders
表。
要选择订单数据并设置日期值格式,请使用以下语句:
SELECT
orderNumber,
DATE_FORMAT(orderdate, '%Y-%m-%d') orderDate,
DATE_FORMAT(requireddate, '%a %D %b %Y') requireddate,
DATE_FORMAT(shippedDate, '%W %D %M %Y') shippedDate
FROM
orders;
Code language: SQL (Structured Query Language) (sql)
我们根据格式字符串指定的不同日期格式来格式化每个订单的订单日期、所需日期和发货日期。
MySQL DATE_FORMAT
和ORDER BY
请参见以下示例:
SELECT
orderNumber,
DATE_FORMAT(shippeddate, '%W %D %M %Y') shippeddate
FROM
orders
WHERE
shippeddate IS NOT NULL
ORDER BY shippeddate;
Code language: SQL (Structured Query Language) (sql)
在查询中,我们选择了所有发货日期不为NULL
订单,并按照发货日期对订单进行排序。但是,订单未正确排序。
原因是我们使用shippeddate
作为DATE_FORMAT
函数输出的别名,它是一个字符串, ORDER BY子句采用别名并根据字符串值而不是日期值对订单进行排序。
为了解决这个问题,我们必须使用与列名不同的别名;请参阅以下声明:
SELECT
orderNumber,
DATE_FORMAT(shippeddate, '%W %D %M %Y') 'Shipped date'
FROM
orders
WHERE
shippeddate IS NOT NULL
ORDER BY shippeddate;
Code language: SQL (Structured Query Language) (sql)
在本教程中,我们向您展示了如何使用 MySQL DATE_FORMAT
函数根据指定的格式格式化日期。
本教程有帮助吗?