SQL SELECT - 订购日期格式错误

SQL SELECT - order dates with wrong format

我的任务是在我们的网络应用程序中订购一些条目。 10 年前其他人提出的当前解决方案是 db 上有一个 select 然后它迭代并生成 table.

问题是,日期是 dd-mm-yyyy 格式和 varchar 数据。

而且不太确定,如果我有足够的勇气对数据库进行更改。

所以有没有什么方法可以在 select 内订购它,有什么方法可以在最后订购吗?或者在代码中不做一些可怕的功能的唯一方法是更改​​数据库?

您可以使用 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')

长期解决方案应该是将该列转换为正确的日期类型。

您可以为此使用 STR_TO_DATE() 函数。尝试

ORDER BY STR_TO_DATE(varcharDateColumn, '%d-%m-%Y')

它将您的 character-string 日期转换为 DATE 数据类型,排序工作没有问题。

从 MySQL 5.7 或更高版本开始,您可以将 so-called 生成的列 添加到 table 中,而无需触及其他数据。

     ALTER TABLE tbl 
      ADD COLUMN goodDate 
              AS (STR_TO_DATE(varcharDateColumn, '%m-%d-%Y'))
          STORED;

如果您需要使用它进行搜索,您甚至可以在该列上放置一个索引。

ALTER TABLE t1 ADD INDEX goodDate(goodDate);