【发布时间】:2021-04-02 09:52:26
【问题描述】:
我有一个包含此格式示例的日期的字段:Feb. 2020 年 15 月 15 日,我需要按此字段对结果 DESC 进行排序,但它保存为 VARCHAR,我无法更改。有解决办法吗?
我已经尝试 STR_TO_DATE 在 mysql 查询中排序,但没有按预期工作..
提前感谢您的任何帮助和建议。
【问题讨论】:
我有一个包含此格式示例的日期的字段:Feb. 2020 年 15 月 15 日,我需要按此字段对结果 DESC 进行排序,但它保存为 VARCHAR,我无法更改。有解决办法吗?
我已经尝试 STR_TO_DATE 在 mysql 查询中排序,但没有按预期工作..
提前感谢您的任何帮助和建议。
【问题讨论】:
STR_TO_DATE() 可以根据值使用正确的格式和标点符号。在您的日期值Feb. 15, 2020 的情况下,正确的STR_TO_DATE() 格式是:
STR_TO_DATE("Feb. 15, 2020", "%b. %d, %Y");
在哪里:
| Format | description |
|---|---|
| %b | Abbreviated month name (Jan to Dec) |
| %d | Day of the month as a numeric value (01 to 31) |
| %Y | Year as a numeric, 4-digit value |
如果数据始终以以下格式存储:
| month | day | year |
|---|---|---|
| Feb. | 05, | 2020 |
| 3 character month abbreviation | both 05 or 5 are acceptable | 4 digit year (but it seems to work with 2-digit year based on the fiddle below) |
那么上面的STR_TO_DATE()函数就足够了。如果某些月份有完整的月份名称,例如 June. 而不是 Jun.,则 %b 的函数将不适用于该列。
https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=d70750b6d524f9b4cfa5f8c01169208b
【讨论】: