一、业务场景

如果我们的日期字段在数据库设计的是字符串类型,我们后期如何根据此字段进行排序?

Mysql sql将字符串转时间戳 mysql字符串转换为日期_java

案例如下

Mysql sql将字符串转时间戳 mysql字符串转换为日期_经验分享_02

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;

Mysql sql将字符串转时间戳 mysql字符串转换为日期_经验分享_03


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');

Mysql sql将字符串转时间戳 mysql字符串转换为日期_数据库_04

这个语句会将当前时间转换成日期类型,并将其转换成日期格式为"%Y-%m-%d"的字符串,即"年-月-日"。

因此,str_to_date函数主要用于将日期字符串转换成日期类型,而DATE_FORMAT函数主要用于将日期类型的字段或者日期字符串转换成指定格式的日期字符串。