按日期形式存储的按日期排序的行

时间:2013-03-31 04:29:38

标签: php mysql sorting

实际上,我正在尝试按日期字段对行进行排序,其中日期以类似的形式存储

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字段。

所以,我想要的是它应该按日期列排序行......

请帮助。如果您有任何问题,请问我......

提前致谢...

3 个答案:

答案 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


如果您有时间更改架构,最好的方法是将这些日期存储为数据库中的DATEDATETIME。如果您担心在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_DATECOALESCE

select *
from yourtable
order by 
  COALESCE(STR_TO_DATE(datec, '%M %Y'),date)

SQL Fiddle Demo