1

所以不幸的是,我有一个日期的 VARCHAR 列,格式如下:Jun-13-2013

(我知道这样做不正确,应该以标准格式存储在 DATETIME 列中)

我试图获取每一行中的所有数据,并按该 VARCHAR 列作为 DATETIME 排序,但我没有找到任何东西来转换格式错误的日期列以进行排序。

这是我的查询:

$result = mysql_query("SELECT * FROM archive ORDER BY crapdates DESC");

但我正在尝试将crapdates列转换为日期时间......这甚至可能吗?

我在任何地方都找不到 mmm-dd-yyyy 格式转换

感谢检查出来

4

3 回答 3

2

您希望该STR_TO_DATE()函数将现有的 varchar 列转换为日期值。

我绝对建议创建一个新列并使用STR_TO_DATE()将现有列中的值复制到新列中,而不是STR_TO_DATE()直接ORDER BYSELECT.

UPDATE archive SET newdate = STR_TO_DATE(crapdate,'%b-%e-%Y');

如果您无法更改表结构,则可以对现有列进行排序,如下所示:

SELECT * FROM archive ORDER BY STR_TO_DATE(crapdate,'%b-%e-%Y') DESC;
于 2013-06-13T17:40:04.917 回答
1

“您可以使用STR_TO_DATE()将字符串转换为 MySQL 日期值和ORDER BY结果:

ORDER BY STR_TO_DATE(datestring, '%d/%m/%Y')

但是,最好将列转换为DATE数据类型,而不是使用字符串。”

答案:https ://stackoverflow.com/a/10637668/1146492 by xdazz

于 2013-06-13T17:39:47.783 回答
0

我尝试了 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

它将返回您的愿望排序。

于 2021-03-25T21:22:59.857 回答