MySQL - DATE_FORMAT() 函数



MySQL 的 DATE_FORMAT() 函数接受日期或日期时间值和格式字符串作为参数。它根据指定的格式格式化给定的日期并返回结果。

MySQL 为所有包含日期和时间值的时态数据类型保存了一些默认格式,如下所示

类型 格式
DATE YYYY-MM-DD
TIME HH:MM:SS
DATETIME YYYY-MM-DD HH:MI:SS
TIMESTAMP YYYY-MM-DD HH:MI:SS
YEAR YYYY

格式字符串

但是,除了默认值之外,您还可以根据需要格式化日期或时间值。为此,可以使用某些具有预定义含义的字符来创建格式字符串。它们是 -

格式 描述
%a 星期几名称 (Sun...Sat)
%b 月份名称 (Jan...Dec)
%c 月份,数字 (0...12)
%D 带英文后缀的月份日期 (0th, 1st, 2nd, 3rd, ...)
%d 月份日期,数字 (01...31)
%e 月份日期,数字 (0...31)
%f 微秒 (000000...999999)
%H 小时 (00...23)
%h 小时 (00...12)
%I 小时 (00...12)
%i 分钟,数字 (00...59)
%j 一年中的日期 (001...366)
%k 小时 (0...23)
%l 小时 (1...12)
%M 月份名称 (January...December)
%m 月份作为数字值 (00...12)
%p AM 或 PM
%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 星期几名称 (Sunday...Saturday)
%w 一周中的日期 (0=星期日...6=星期六)
%X 星期日是一周的第一天时的年份,数字,四位数;与 %V 一起使用
%x 星期一是一周的第一天时的年份,数字,四位数;与 %v 一起使用
%Y 年份作为数字值,4 位数
%y 年份作为数字值,2 位数

语法

以下是 MySQL DATE_FORMAT() 函数的语法 -

DATE_FORMAT(date,format);

参数

此方法接受两个参数。下面描述了相同的内容 -

  • date: 我们要格式化的日期或日期时间表达式。

  • format: 指定输出所需格式的字符串。

返回值

此函数返回一个格式化字符串,表示根据指定格式的日期或日期时间值。

示例

在以下示例中,我们使用 MySQL DATE_FORMAT() 函数打印给定日期的星期几、月份和年份 -

SELECT DATE_FORMAT('2023-11-21', '%W %M %Y') As Result;

输出

这将产生以下结果 -

结果
星期二 十一月 2023

示例

在这里,我们获取给定日期的星期几(短)、月份(短)和月份日期 -

SELECT DATE_FORMAT('2023-11-21', '%a %b %c') As Result;

输出

以下是输出 -

结果
周二 十一月 11

示例

以下查询打印星期几、月份、年份和 12 小时格式的当天时间 -

SELECT DATE_FORMAT('2023-11-21 22:23:00','%W %M %Y %r') 
As Result;

输出

以下是输出 -

结果
星期二 十一月 2023 晚上 10:23:00

在以下示例中,我们使用 CREATE TABLE 语句创建了一个名为 ORDERS 的表 -

CREATE TABLE ORDERS (
   OID INT NOT NULL,
   DATE VARCHAR (20) NOT NULL,
   CUSTOMER_ID INT NOT NULL,
   AMOUNT DECIMAL (18, 2)
);

现在,我们使用 INSERT 语句将以下记录插入 ORDERS 表中。

INSERT INTO ORDERS VALUES 
(102, '2009-10-08 00:00:00', 3, 3000.00),
(100, '2009-10-08 00:00:00', 3, 1500.00),
(101, '2009-11-20 00:00:00', 2, 1560.00),
(103, '2008-05-20 00:00:00', 4, 2060.00);

执行以下查询以获取上面创建的表中所有插入的记录。

Select * From ORDERS;

以下是 ORDERS 表的内容:

订单 ID (OID) DATE 客户 ID (CUSTOMER_ID) 金额 (AMOUNT)
102 2009-10-08 00:00:00 3 3000.00
100 2009-10-08 00:00:00 3 1500.00
101 2009-11-20 00:00:00 2 1560.00
103 2008-05-20 00:00:00 4 2060.00

现在,我们使用 MySQL 的 DATE_FORMAT() 函数来获取 "DATE" 列中每个日期值的日、月、年和星期名称。

SELECT OID, DATE, DATE_FORMAT(DATE, '%D %M %Y, %W')
As Result FROM ORDERS;

输出

输出结果如下所示:

订单 ID (OID) DATE 结果
102 2009-10-08 00:00:00 2009年10月8日,星期四
100 2009-10-08 00:00:00 2009年10月8日,星期四
101 2009-11-20 00:00:00 2009年11月20日,星期五
103 2008-05-20 00:00:00 2008年5月20日,星期二
广告