对多种日期格式进行排序

时间:2015-10-31 10:24:49

标签: php sorting mysqli

在数据库中,我有列date_of_premiere(类型:INT)。通过验证该列可以存储三个“类型”的值:

YYYY(例如2016年,当没有关于特定月份和日期的信息时)

YYYYMM(例如201511,当没有关于特定日期的信息时)

YYYYMMDD(例如20151101)

我在排序方面遇到了问题,因为当我尝试对该列进行排序时......

$query = $this->db->query(" SELECT * from table order by `date_of_premiere ");

...格式为YYYY的记录将始终优先。

当我获取数据时,我可以做某种解决方法......

$dates =[];
while($row = $query->fetch_assoc())
{
    if(strlen($row['date_of_premiere']) == 4)
    {
         $dates[] .= intval($row['date_of_premiere'] .'0000');
    } else if (strlen($row['date_of_premiere']) == 6)
    {
         $dates[] .= intval($row['date_of_premiere'] .'00');
    } else 
    {
         $dates[] .= intval($row['date_of_premiere']);
    }
} 

...然后我可以做asort($dates) ...

// input values: 2015, 2016, 201511, 20151101
// example output with correct sorting:
Array
(
    [1] => 20150000
    [0] => 20151100
    [3] => 20151101
    [2] => 20160000
)

...但我很好奇是否可以使用mysqli查询对date_of_premiere进行排序。

1 个答案:

答案 0 :(得分:1)

您可以按日期列的顺序排列为CHAR:

... ORDER BY CAST(date_of_premier AS CHAR(32))