-1

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

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'...),因为我的数据库中存储了两个日期。一个是时间戳 ie date,另一个是自定义日期,即datec用户自己输入的日期。如果该datec字段为空,则输出该date字段。

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

请帮忙。如果你有什么问题,请问我......

提前致谢...

4

3 回答 3

1

日期以字符串格式存储。所以你需要使用STR_TO_DATE()功能

尝试这个

SELECT * FROM table ORDER BY STR_TO_DATE(datec, "%M, %Y") DESC
于 2013-03-31T04:42:33.037 回答
1

这是将日期作为字符串存储在数据库中的优点之一。STR_TO_DATE()如果您需要使用函数将字符串转换为有效日期,则仍然可以应用排序。

SELECT *
FROM   tableName
ORDER  BY STR_TO_DATE(datec, '%M, %Y') DESC

关联


如果您有时间更改架构,最好的方法是将这些日期存储为数据库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
于 2013-03-31T04:43:12.330 回答
1

我认为这就是您正在寻找的,使用STR_TO_DATEand COALESCE

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

SQL 小提琴演示

于 2013-03-31T04:45:27.420 回答