我一直在更新现有网站。在那里有一个输入表格将保存在表格...表格结构和样本数据如下
id | name | type | in_date | year
-----------------------------------------------------
1 | name1 | 1 | 2-July | 2011
2 | name2 | 2 | 2-June | 2011
3 | name44 | 2 | 8-Sep | 2011
现在我需要以完整的日期顺序(即2011年6月2日)作为一个简单的查询来订购此表
SELECT * FROM order_list order by date DESC
有什么方法可以做这个动作吗?我尝试了很多查询....任何方法来组合这两行..
我们无法更改数据库,因为它包含更多现有记录。
答案 0 :(得分:5)
您应该将日期存储为MySQL DATE
类型,而不是字符串:
ALTER TABLE order_list ADD COLUMN new_date DATE;
UPDATE order_list
SET new_date = STR_TO_DATE(CONCAT(in_date, '-', year), '%e-%b-%Y');
ALTER TABLE order_list DROP COLUMN in_date, DROP COLUMN year;
然后订购变得微不足道(即完全按照您的尝试工作):
SELECT * FROM order_list ORDER BY date DESC;
如果您无法更改数据库架构,可以在ORDER BY
子句中执行STR_TO_DATE
操作(但效率不高):
SELECT *
FROM order_list
ORDER BY STR_TO_DATE(CONCAT(in_date, '-', year), '%e-%b-%Y') DESC
答案 1 :(得分:1)
不要那样做。将整个日期放在一列中,然后,如果确实需要,创建将保存年份或日期/月份的计算列。
您可以创建一个简单的脚本,将这两个现有列集成到现有数据库中的一个统一日期列中。
答案 2 :(得分:1)
您可以尝试使用+
(SQL SERVER)或CONCAT
(MySQL)
SELECT * FROM order_list order by in_date + year DESC