我正在尝试使用列Date
对表进行排序。它是颠倒排序的,即日期是降序格式。
但是,列Date
是文本格式:'31-June-2008'
我如何对该列进行排序?
尝试修改此代码,但无法正常工作
alter table bajaj1 modify column Date date;
答案 0 :(得分:1)
您的问题是您的日期不是有效的日期格式,因此它们被按字符串排序。因此,例如,31-June-2008
在9-June-2008
之前。要对其正确排序,您需要将其转换为日期,您可以使用STR_TO_DATE
:
STR_TO_DATE(Date, '%e-%M-%Y')
请注意,我假设当一个月的某天小于10时,它看起来像是4-March-2001
。如果类似04-March-2001
,则应将%e
更改为%d
。
在查询中,您可以将其用作
SELECT *
FROM yourtable
ORDER BY STR_TO_DATE(Date, '%e-%M-%Y')
如果您想更改表结构,则添加一个generated column可能是最简单的:
ALTER TABLE yourtable ADD sdate DATE AS (STR_TO_DATE(Date, '%e-%M-%Y'))
然后,您可以在sdate
而不是Date
上进行排序。