【问题标题】:Splitting fields in sql query and sorting by them拆分sql查询中的字段并按它们排序
【发布时间】:2012-03-02 06:47:59
【问题描述】:

我有一个包含组合日期的字段,即 2012-02-03 - 2012-02-05 行,其中第一个日期是“开始”日期,第二个是“结束”日期。

有没有办法可以拆分这两个日期,然后按“开始”日期排序?

我知道最好的办法是为这两个日期设置两个不同的字段,但是自从我开始这样做以来,需要进行大量重新编码以将它们分开。

【问题讨论】:

  • 哪个datetype 用于该列?

标签: mysql split field


【解决方案1】:

您可以为此使用SUBSTRING_INDEX

假设您的日期之间有“ - ”(即空格、连字符、空格),您可以执行以下操作:

SELECT SUBSTRING_INDEX(datefield,' - ',1) as fromDate,
       SUBSTRING_INDEX(datefield,' - ',-1) as toDate,
FROM ..
ORDER BY DATE(fromDate)

SUBSTRING_INDEX(string,delimiter,count) 返回所有string 直到(不包括)countth 出现delimiter。如果delimiter 为负数,则从右开始计数,并返回字符串末尾的子字符串。

我使用 DATE(fromDate)fromDate 从字符串转换为 MySQL 日期,因此它以类似日期的方式排序。

【讨论】:

    【解决方案2】:

    或者,如果您的日期正好有 10 个字符长度,您可以使用 SUBSTRING 如下http://sqlfiddle.com/#!2/53006/4

    【讨论】:

      【解决方案3】:

      您可以使用 leftright 函数来获取该列中左起 10 位和列中右起 10 位,使用别名 from_date 和 to_date 然后排序。

      2012-02-03 - 2012-02-05
      __________   __________
       Left 10      Right 10 
       Digits       Digits
      
      
      SELECT LEFT(mydate,10) AS from_date,
             RIGHT(mydate,10) AS to_date
             FROM mytable
             ORDER BY from_date,to_date;
      

      【讨论】:

        猜你喜欢
        • 2022-07-19
        • 2010-09-28
        • 2012-07-08
        • 2016-04-14
        • 1970-01-01
        • 1970-01-01
        • 2018-01-05
        • 1970-01-01
        • 2020-01-26
        相关资源
        最近更新 更多