实际上,我正在尝试按日期字段对行进行排序,其中日期以类似的形式存储
DateC
===========
April, 2012
May, 2012
January, 2013
Date
===========
2013-01-03 10:51:23
2013-02-19 10:51:23
2013-03-26 10:51:23
但我无法仅使用ORDER BY datec DESC
对其进行排序。
我无法使用ORDER BY FIELD (datec, 'December 2012', November 2012'...)
,因为我的数据库中存储了两个日期。一个是时间戳,即date
,另一个是自定义日期,即用户自己输入的datec
。如果datec
字段为空,则会输出date
字段。
所以,我想要的是它应该按日期列排序行......
请帮助。如果您有任何问题,请问我......
提前致谢...
答案 0 :(得分:1)
日期以字符串格式存储。所以你需要使用STR_TO_DATE()
函数
试试这个
SELECT * FROM table ORDER BY STR_TO_DATE(datec, "%M, %Y") DESC
答案 1 :(得分:1)
这是将日期作为字符串存储在数据库中的一个优点。如果您需要使用STR_TO_DATE()
函数将字符串转换为有效日期,则仍可以应用排序。
SELECT *
FROM tableName
ORDER BY STR_TO_DATE(datec, '%M, %Y') DESC
LINK
如果您有时间更改架构,最好的方法是将这些日期存储为数据库中的DATE
或DATETIME
。如果您担心在SELECT
语句期间格式化值,则仍然会有一个名为DATE_FORMAT()
的函数,它将日期转换为所需格式的字符串。
实施例,
SELECT DATE_FORMAT(CURDATE(), '%M, %Y') DateC
将产生
March, 2013
更新1
SELECT *
FROM tableName
ORDER BY STR_TO_DATE(datec, '%M, %Y') DESC,
date DESC
答案 2 :(得分:1)
我认为这是您正在寻找的,使用STR_TO_DATE
和COALESCE
:
select *
from yourtable
order by
COALESCE(STR_TO_DATE(datec, '%M %Y'),date)