【问题标题】:Sorting mysql hours AM PM varchar排序 mysql 小时 AM PM varchar
【发布时间】:2012-03-28 03:13:43
【问题描述】:

mysql小时排序问题

我有一个带有 varchar 列的数据库

开始

数据如(小时)

20:15 - 21:30 - 00:15

我排序

$query = 'SELECT * FROM `event` WHERE `location_id` = "' . $location['id'] . '" ORDER BY CAST(`start` AS SIGNED) ASC';

这给出了以下输出

00:15 - 20:15 - 21:30

问题是我最后需要 00:15

20:15 - 21:30 - 00:15

有人吗?

【问题讨论】:

    标签: mysql sorting while-loop


    【解决方案1】:
    CAST( substr(start,1,(length(start-6))) AS SIGNED) 
    

    在我的脑海中 - 没有测试..

    基本想法 - 用子字符串去除时间部分 - 然后做你的伎俩。

    【讨论】:

      【解决方案2】:

      您确定该要求吗? 24 小时制通常不会这样工作。

      简单的技巧是将 0 小时视为 24:

      SELECT * FROM event
      WHERE location_id=?
      ORDER BY REPLACE(start, '00:', '24:')
      

      尽管您这样做的任何方式都将失去潜在的可索引性。如果您需要索引,则必须创建另一列,例如。整数分钟加 60 模 1440。

      [顺便说一句:我强烈推荐参数化查询以避免location_id 中潜在的 SQL 注入。]

      【讨论】:

      • 这看起来像是一个解决方案,但是 01:15 等呢?
      • 找到解决方案 $query = 'SELECT * FROM minicms_timetable_event WHERE location_id = "' . $location['id'] . '" ORDER BY IF(LEFT(start,2 ) = "00",1,0), start ASC';
      • 你想要01:15 的顺序是什么?问题没有说。
      【解决方案3】:

      解决办法是

      $query = 'SELECT * FROM event WHERE location_id = "' . $location['id'] . '" ORDER BY IF(LEFT(start,2) = "00",1,0), start ASC';
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-01-19
        • 2018-09-02
        • 1970-01-01
        • 2018-01-21
        • 1970-01-01
        • 2012-06-09
        • 1970-01-01
        • 2015-10-27
        相关资源
        最近更新 更多