我的任务是在我们的web应用程序中订购一些条目。其他人10年前提出的当前解决方案是,在数据库上有一个select,然后它迭代并生成表。
问题是,该日期的格式为dd-mm-yyyy,数据为varchar。
如果我有勇气对数据库进行更改,我也不太确定。
那么,有没有办法在精选中订购,有没有方法在最后一刻订购?或者,在代码中不生成一些可怕函数的唯一方法是更改数据库?
您可以为此使用STR_TO_DATE((函数。尝试
ORDER BY STR_TO_DATE(varcharDateColumn, '%d-%m-%Y')
它将您的字符串日期转换为DATE
数据类型,这样排序就不会出现问题。
从MySQL 5.7或更高版本开始,您可以在不接触其他数据的情况下将所谓的生成列添加到表中。
ALTER TABLE tbl
ADD COLUMN goodDate
AS (STR_TO_DATE(varcharDateColumn, '%m-%d-%Y'))
STORED;
如果您需要将索引用于searching,您甚至可以在该列上放置索引。
ALTER TABLE t1 ADD INDEX goodDate(goodDate);
您可以使用STR_TO_DATE函数,但这只适用于小表(可能有数千条记录(,在大数据集上,您将面临性能问题:
SELECT *
FROM (
SELECT '01-5-2013' AS Date
UNION ALL
SELECT '02-6-2013' AS Date
UNION ALL
SELECT '01-6-2013' AS Date
) AS t1
ORDER BY STR_TO_DATE(Date,'%d-%m-%Y')
长期解决方案应该是将该列转换为适当的日期类型。