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() 将现有列中的值复制到新列中,而不是直接在SELECTORDER 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)日期排序的主要内容,如果未能解决你的问题,请参考以下文章

如果副本被保存并提供给另一个线程,为什么va_list var-arg副本不能按预期工作?

MySQL常用操作

按字典中的日期划分表视图

MySQL中的严格模式

使用 /proc/[pid]/pagemap

MySQL按列名替换表中的值