代码之家  ›  专栏  ›  技术社区  ›  André Miranda

mysql-按日期然后按时间排序

  •  8
  • André Miranda  · 技术社区  · 16 年前

    我有一个表,其中有两个“datetime”字段:“eventdate”和“eventhour”。我试着按“eventdate”和“eventhour”订购。

    对于每个日期,我都会有一个操作系统事件列表,所以我要按日期和时间排序。

    谢谢!!

    8 回复  |  直到 10 年前
        1
  •  22
  •   paxdiablo    16 年前

    我不确定你的问题是否有任何隐藏的意义,但这样做的标准方法似乎是合适的:

    ... order by eventDate, eventHour
    

    这给了你时间,比如:

    Feb 15
        09:00
        12:00
        17:00
    Feb 23
        22:00
        : :
    

    如果你真的有这两个字段 真实的 datetime 字段,您的模式被搞砸了。你应该有一个 date 日期字段和 time 或小时的积分场。

    能够 将两者合并为一个 日期时间 字段,但是您应该平衡这一点与在您的 select 如果你想把它们分开的话。如果要清楚地使用字段,通常最好将它们分开。

    如果你 必须使用每行函数,您可以使用:

    date(datetime_column)
    time(datetime_column)
    

    只提取 日期 时间 A的组成部分 日期时间 .

        2
  •  11
  •   Romancha KC    13 年前

    如果要先将数据列为最新事件日期,如果存在相同日期的记录,则 数据将按时间(即最新时间)排序,

    您可以尝试如下操作

    select * from my_table order by eventDate DESC, eventHour DESC
    
        3
  •  3
  •   Matt Mitchell    16 年前

    为什么不把这两个 eventDate eventHour 如果他们都是 DateTime ?

    要获得当前方案的所需内容,可以执行以下操作:

    SELECT * FROM table 
      ORDER BY 
        EXTRACT(YEAR_MONTH FROM eventDate),
        EXTRACT(DAY FROM eventDate),
        EXTRACT(HOUR FROM eventHour)
    
        4
  •  3
  •   Ned Batchelder    16 年前

    select * from my_table order by eventDate, eventHour
    

    不工作?

        5
  •  1
  •   northpole    16 年前

    您可以根据需要订购任意数量的产品,只需使用列表即可。它将按第一个值排序,然后按第二个…等排序。

      SELECT *
        FROM table
    ORDER BY eventDate, eventHour
    

    如果您有两个日期时间字段,那么您可以使用如下方法仅获取日期或小时:

        SELECT *
          FROM table
      ORDER BY DATE_FORMAT(eventDate, '%d'), DATE_FORMAT(eventHour, '%h')
    
        6
  •  1
  •   JMD    12 年前

    按ID降序排列。

    <?php $sql = "SELECT * FROM posts ORDER BY id DESC?>

    这应该管用

        7
  •  0
  •   irshad    14 年前

    首先,在不同领域节省日期和时间是不好的做法。

    无论如何,假设您以正确的格式保存日期/时间。 (即:日期格式为年-月-日,时间为hh:ss)

    首先需要连接日期和时间以获取日期时间值。 从技术上讲,您可以在datetime字段上执行order by,但这又不是一个好的实践。 在我们的例子中,当我们运行concat时,会将其转换为字符串,这样结果集就会出错。 所以您需要将它转换为一个Unix时间戳来进行排序。

    在ORDERBY子句之前的日期时间字段上运行unix时间戳是一种良好的做法。

    您可以使用以下查询。

    选择第1列、第2列, Unix时间戳(concat( event_date ,‘ event_time ))作为unixtimestamp 从表名 按unixtimestamp desc排序;

    注意:(concat函数中的事件日期和事件时间之间有一个空格。这里没有正确显示。)

        8
  •  0
  •   David ddc    10 年前

    这是对我最有效的方法,只需将日期转换为函数中的天数即可。 日(日) 和时间到函数的秒数 时间到秒(时间) 例如:

    SELECT 
        nv.destac,
        DATE_FORMAT(nv.date_nov , '%d-%m-%Y %T') as date_order, 
        TO_DAYS(nv.date_nov) as days,
        TIME_TO_SEC(TIME(nv.date_nov)) as seconds
    
    FROM 
        newsviews nv
    WHERE 
         nv.active
    ORDER BY 
          nv.destac DESC,  days DESC, seconds DESC ;
    

    将Mejor Forma que funcion_3 para m_…,s_3 lo convertir la fecha al n_:Mero de d_…,作为con la funci_3 n 星期天(FECHA) 是的,我们的朋友 时间到秒(tiempo)

    SELECT 
        nv.destacar,
        DATE_FORMAT(nv.fecha_nov , '%d-%m-%Y %T') as fecha_orden, 
        TO_DAYS(nv.fecha_nov) as dias,
        TIME_TO_SEC(TIME(nv.fecha_nov)) as segundos
    
    FROM 
        novedades nv
    WHERE 
         nv.activa
    ORDER BY 
          nv.destacar DESC,  dias DESC, segundos DESC ;