一、业务场景
如果我们的日期字段在数据库设计的是字符串类型,我们后期如何根据此字段进行排序?
案例如下
MySQL脚本
CREATE TABLE date_data (
id INT(11) NOT NULL AUTO_INCREMENT,
date_str VARCHAR(100) NOT NULL,
PRIMARY KEY (id)
);
INSERT INTO date_data (date_str) VALUES
('2022-01-01'),
('2021-12-31'),
('2021-12-15'),
('2022-02-14'),
('2021-11-11'),
('2022-03-01'),
('2021-10-20'),
('2022-04-01'),
('2021-09-20'),
('2022-05-01');
二、案例学习
2.1、DATE_FORMAT函数
可以使用DATE_FORMAT函数将日期字符串转换成日期类型,然后再进行排序筛选。下面是一个示例SQL查询语句:
SELECT * FROM date_data
ORDER BY DATE_FORMAT(date_str, '%Y-%m-%d') ASC
LIMIT 5;
DATE_FORMAT函数将日期字符串转换成日期类型,'%Y-%m-%d’表示日期格式为"年-月-日"。输出结果与之前的示例相同:
+----+---------------------+
| id | date_str |
+----+---------------------+
| 1 | 2022-01-01 |
| 2 | 2021-12-31 |
| 3 | 2021-12-15 |
| 4 | 2022-02-14 |
| 5 | 2021-11-11 |
+----+---------------------+
2.2、str_to_date函数
也可以使用如下语句
SELECT * FROM date_data
ORDER BY str_to_date(date_str, '%Y-%m-%d') ASC
LIMIT 5;
2.3、区别对吧
解释一下str_to_date和DATE_FORMAT区别
str_to_date和DATE_FORMAT都是MySQL中的函数,它们都可以将日期字符串转换成日期类型,但是它们的作用和使用方式有所不同。
str_to_date函数将日期字符串转换成日期类型,但是需要指定日期字符串的格式,例如:
SELECT str_to_date('2022-01-01', '%Y-%m-%d');
这个语句会将日期字符串’2022-01-01’转换成日期类型,日期格式为’%Y-%m-%d’,即"年-月-日"。
而DATE_FORMAT函数则可以将日期类型的字段或者日期字符串转换成指定格式的日期字符串,例如:
SELECT DATE_FORMAT(NOW(), '%Y-%m-%d');
这个语句会将当前时间转换成日期类型,并将其转换成日期格式为"%Y-%m-%d"的字符串,即"年-月-日"。
因此,str_to_date函数主要用于将日期字符串转换成日期类型,而DATE_FORMAT函数主要用于将日期类型的字段或者日期字符串转换成指定格式的日期字符串。