力扣题
1、题目地址
1853. 转换日期格式
2、模拟表
表: Days
| Column Name | Type | 
|---|---|
| day | date | 
- day 是这个表的主键。
3、要求
给定一个Days表,请你编写SQL查询语句,将Days表中的每一个日期转化为"day_name, month_name day, year"格式的字符串。
返回的结果表 不计顺序 。
查询结果格式如下例所示。
示例 1:
输入:
 Days 表:
| day | 
|---|
| 2022-04-12 | 
| 2021-08-09 | 
| 2020-06-26 | 
输出:
| day | 
|---|
| Tuesday, April 12, 2022 | 
| Monday, August 9, 2021 | 
| Friday, June 26, 2020 | 
解释:
 请注意,输出对大小写敏感。
4、代码编写
我的写法
SELECT CONCAT(DAYNAME(day), ', ', MONTHNAME(day), ' ', DAYOFMONTH(day), ', ', YEAR(day)) AS day
FROM Days
| day                     |
| ----------------------- |
| Tuesday, April 12, 2022 |
| Monday, August 9, 2021  |
| Friday, June 26, 2020   |
网友写法
SELECT DATE_FORMAT(day, '%W, %M %e, %Y') AS day
FROM Days
| day                     |
| ----------------------- |
| Tuesday, April 12, 2022 |
| Monday, August 9, 2021  |
| Friday, June 26, 2020   |
5、知识点
我的写法
1、DAYOFWEEK(date) - 星期索引(ODBC标准)
作用:返回日期date的星期索引(1=星期天,2=星期一, ……7=星期六)。这些索引值对应于ODBC标准。
mysql> select DAYOFWEEK('1998-02-03');
-> 3
2、WEEKDAY(date) - 星期索引
作用:返回date的星期索引(0=星期一,1=星期二, ……6= 星期天)。
mysql> select WEEKDAY('1997-10-04 22:23:00');
-> 5
mysql> select WEEKDAY('1997-11-05');
-> 2
3、DAYOFMONTH(date) - 日(1~31) ⭐️
作用:返回date的月份中日期,在1到31范围内。
mysql> select DAYOFMONTH('1998-02-03');
-> 3
4、DAYOFYEAR(date) - 日(1~366)
作用:返回date在一年中的日数, 在1到366范围内。
mysql> select DAYOFYEAR('1998-02-03');
-> 34
5、MONTH(date) - 月(数字)
作用:返回date的月份,范围1到12。
mysql> select MONTH('1998-02-03');
-> 2
6、DAYNAME(date) - 星期(英文) ⭐️
作用:返回date的星期名字。
mysql> select DAYNAME("1998-02-05");
-> 'Thursday'
7、MONTHNAME(date) - 月(英文) ⭐️
作用:返回date的月份名字。
mysql> select MONTHNAME("1998-02-05");
-> 'February'
8、QUARTER(date) - 季度(数字)
作用:
 返回date一年中的季度,范围1到4。
 1-3 月返回 1
 4 月至 6 月返回 2
 7-9 月返回 3
 10 月至 12 月返回 4
mysql> select QUARTER('98-04-01');
-> 2
9、WEEK(date) 和 WEEK(date,first) - 第几周
作用:
 对于星期天是一周的第一天的地方,有一个单个参数,返回date的周数,范围在0到52。
 2个参数形式WEEK()允许你指定星期是否开始于星期天或星期一。
 如果第二个参数是0,星期从星期天开始,如果第二个参数是1,从星期一开始。
mysql> select WEEK('1998-02-20');
-> 7
mysql> select WEEK('1998-02-20',0);
-> 7
mysql> select WEEK('1998-02-20',1);
-> 8
注意:里面需要注意第二个参数的设定,比如第二个参数设置为 0,就是从星期天开始,1998 年的第一个星期天是 1 月 4 日,前面只有三天,日数不满足大于 3 的条件,不算一周,所以计算到 1998 年 2 月 20 日 是 第 7 周,当第二个参数设置为 1,就是从星期一开始,1998 年 的第一个星期一是 1 月 5 日,前面有四天,日数满足大于 3 的条件,算一周,所以计算到 1998 年 2 月 20 日 是 第 8 周。
参考:MySQL WEEK() 函数
10、YEAR(date) - 年(数字) ⭐️
作用:返回date的年份,范围在1000到9999。
mysql> select YEAR('98-02-03');
-> 1998
11、HOUR(time) - 小时(0~23)
作用:返回time的小时,范围是0到23。
mysql> select HOUR('10:05:03');
-> 10
12、MINUTE(time) - 分钟(0~59)
作用:返回time的分钟,范围是0到59。
mysql> select MINUTE('98-02-03 10:05:03');
-> 5
13、SECOND(time) - 秒数(0~59)
作用:返回time的秒数,范围是0到59。
mysql> select SECOND('10:05:03');
-> 3
网友写法
DATE_FORMAT() 函数
-  语法:DATE_FORMAT(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个数字(小于10),那么一个月之中的第几天表示为加前导加0, 如:00, 01, 02, …31 | 
| %e⭐️ | 没有前导零的月份的日子,例如:1, 2,… 31 | 
| %f | 微秒,范围在 000000..999999 | 
| %H | 24小时格式的小时,前导加 0,例如:00, 01 … 23 | 
| %h | 小时, 12小时格式,带前导零,例如:01, 02 … 12 | 
| %I(i 的大写) | 与 %h相同 | 
| %i | 分数为零,例如:00, 01,… 59 | 
| %j | 一年中的的第几天,前导为 0,例如,001, 002,… 366 | 
| %k | 24小时格式的小时,无前导零,例如:0, 1, 2 … 23 | 
| %l(L 的小写) | 12小时格式的小时,无前导零,例如:0, 1, 2 … 12 | 
| %M⭐️ | 月份全名称,例如:January, February,…December | 
| %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⭐️ | 工作日的全称,例如:Sunday, Monday,…, Saturday | 
| %w | 工作日,以数字来表示(0 = 星期日,1 = 星期一等) | 
| %X | 周的四位数表示年份,第一天是星期日; 经常与 %V一起使用 | 
| %x | 周的四位数表示年份,第一天是星期日; 经常与 %v一起使用 | 
| %Y⭐️ | 表示年份,四位数,例如 2000,2001,… 等。 | 
| %y | 表示年份,两位数,例如 00,01,… 等。 | 
| %% | 将百分比( %)字符添加到输出 | 
6、参考
Mysql 日期转换星期
 MySQL date_format() 函数