按 MySql 上的日期对字符串进行排序
Sort on string as date on MySql
我将 CHAR 字符串以 mm/dd/yyyy 格式存储在数据库字段中。比如
2/26/2022
2/19/2022
2/12/2022
2/5/2022
12/31/2021
12/18/2021
11/27/2021
我需要在不更改声明的情况下按照“日期”对它们进行排序。
MySQL date format DD/MM/YYYY select query? 的 post 建议使用 ORDER BY STR_TO_DATE(datestring, '%d/%m/%Y')
我的 MySQL 语句如下所示:
SELECT stringdate
FROM mytable
WHERE product = '#myproduct#'
ORDER BY STR_TO_DATE(stringdate, '%m/%d/%y') DESC
但是,结果排序不正确。而不是上面显示的所需顺序,它显示如下:
12/31/2021
12/18/2021
11/27/2021
2/26/2022
2/19/2022
2/12/2022
2/5/2022
好像忽略了年份。如何在不实际更改数据库字段声明的情况下对其进行排序?
提前致谢。
2/5/2022
是不带前导零的月份和日期,以及四位数的年份。您指定的格式字符串是 -
- %m - 月份,数字 (00..12)
- %d - 一个月中的第几天,数字 (00..31)
- %y - 年份,数字(两位数)
SELECT stringdate
FROM mytable
WHERE product = '#myproduct#'
ORDER BY STR_TO_DATE(stringdate, '%c/%e/%Y') DESC
- %c - 月份,数字 (0..12)
- %e - 一个月中的第几天,数字 (0..31)
- %Y - 年份,数字,四位数
执行以下查询显示转换日期的差异 -
SELECT
stringdate,
STR_TO_DATE(stringdate, '%m/%d/%y'),
STR_TO_DATE(stringdate, '%c/%e/%Y')
FROM mytable
WHERE product = '#myproduct#'
ORDER BY STR_TO_DATE(stringdate, '%c/%e/%Y') DESC
https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html#function_date-format
%y
是 two-digit 年代码。所以你将它们全部排序为“20”
%Y
是 four-digit 年代码。
请参阅此处的日期格式代码参考:https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html#function_date-format
我建议您使用 DATE
数据类型而不是 CHAR
。
我将 CHAR 字符串以 mm/dd/yyyy 格式存储在数据库字段中。比如
2/26/2022
2/19/2022
2/12/2022
2/5/2022
12/31/2021
12/18/2021
11/27/2021
我需要在不更改声明的情况下按照“日期”对它们进行排序。
MySQL date format DD/MM/YYYY select query? 的 post 建议使用 ORDER BY STR_TO_DATE(datestring, '%d/%m/%Y')
我的 MySQL 语句如下所示:
SELECT stringdate
FROM mytable
WHERE product = '#myproduct#'
ORDER BY STR_TO_DATE(stringdate, '%m/%d/%y') DESC
但是,结果排序不正确。而不是上面显示的所需顺序,它显示如下:
12/31/2021
12/18/2021
11/27/2021
2/26/2022
2/19/2022
2/12/2022
2/5/2022
好像忽略了年份。如何在不实际更改数据库字段声明的情况下对其进行排序?
提前致谢。
2/5/2022
是不带前导零的月份和日期,以及四位数的年份。您指定的格式字符串是 -
- %m - 月份,数字 (00..12)
- %d - 一个月中的第几天,数字 (00..31)
- %y - 年份,数字(两位数)
SELECT stringdate
FROM mytable
WHERE product = '#myproduct#'
ORDER BY STR_TO_DATE(stringdate, '%c/%e/%Y') DESC
- %c - 月份,数字 (0..12)
- %e - 一个月中的第几天,数字 (0..31)
- %Y - 年份,数字,四位数
执行以下查询显示转换日期的差异 -
SELECT
stringdate,
STR_TO_DATE(stringdate, '%m/%d/%y'),
STR_TO_DATE(stringdate, '%c/%e/%Y')
FROM mytable
WHERE product = '#myproduct#'
ORDER BY STR_TO_DATE(stringdate, '%c/%e/%Y') DESC
https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html#function_date-format
%y
是 two-digit 年代码。所以你将它们全部排序为“20”
%Y
是 four-digit 年代码。
请参阅此处的日期格式代码参考:https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html#function_date-format
我建议您使用 DATE
数据类型而不是 CHAR
。