MySql 按 Mmm-dd-yyyy 中的(varchar)日期排序
Posted
技术标签:
【中文标题】MySql 按 Mmm-dd-yyyy 中的(varchar)日期排序【英文标题】:MySql order by (varchar) date in Mmm-dd-yyyy 【发布时间】:2013-06-13 17:30:05 【问题描述】:不幸的是,我有一个 VARCHAR 日期列,格式如下:Jun-13-2013
(我知道这样做不正确,应该以标准格式存储在 DATETIME 列中)
我正在尝试获取每一行中的所有数据,并按该 VARCHAR 列作为 DATETIME 排序,但我没有找到任何东西来转换格式错误的日期列以进行排序。
这是我的查询:
$result = mysql_query("SELECT * FROM archive ORDER BY crapdates DESC");
但我正在尝试将 crapdates
列转换为日期时间...这可能吗?
I'm not finding a mmm-dd-yyyy format conversion anywhere
感谢查看
【问题讨论】:
crapdates
中的数据是否一致地格式化,或以多种方式存储(即 Jun-13-2013、06-13-13 等)?
MySQL date format DD/MM/YYYY select query?的可能重复
【参考方案1】:
您希望STR_TO_DATE()
函数将您现有的 varchar 列转换为日期值。
我绝对建议创建一个新列并使用STR_TO_DATE()
将现有列中的值复制到新列中,而不是直接在SELECT
的ORDER BY
中使用STR_TO_DATE()
。
UPDATE archive SET newdate = STR_TO_DATE(crapdate,'%b-%e-%Y');
如果你不能改变表结构,你可以像这样对现有的列进行排序:
SELECT * FROM archive ORDER BY STR_TO_DATE(crapdate,'%b-%e-%Y') DESC;
【讨论】:
【参考方案2】:"您可以使用STR_TO_DATE()
将您的字符串转换为 MySQL 日期值并使用ORDER BY
转换结果:
ORDER BY STR_TO_DATE(datestring, '%d/%m/%Y')
但是,最好将列转换为 DATE
数据类型,而不是使用字符串。"
答案:https://***.com/a/10637668/1146492 来自 xdazz
【讨论】:
【参考方案3】:我尝试了 str_to_date 但它没有返回期望结果然后我找到了这段代码,但在我的情况下,日期的格式是 03/15/2021
ORDER BY SUBSTR(crapdates, 7) DESC, ORDER BY SUBSTR(crapdates, 1,2) DESC,ORDER BY SUBSTR(crapdates, 4,2) DESC
它会返回你想要的排序。
【讨论】:
以上是关于MySql 按 Mmm-dd-yyyy 中的(varchar)日期排序的主要内容,如果未能解决你的问题,请参考以下文章