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);
我的任务是在我们的网络应用程序中订购一些条目。 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);