【问题标题】:Sorting valuse inside paranthesis对括号内的值进行排序
【发布时间】:2019-09-18 05:36:30
【问题描述】:

我有一列住宅号码

res_no
-------
1a(1)
1a(2)
1c(2)
1a(3)
a1(1)
a1(a)
a1(2)
b1(2)

我想像下面这样排序

res_no
------
1a(1)
1a(2)
1a(3)
1c(2)
a1(1)
a1(2)
b1(2)
a1(a)

如何在 MySQL 中进行这种排序?

【问题讨论】:

  • 到目前为止你做了什么?您是否尝试过使用order by
  • 所有数字是否都以精确的形式显示(即字母、数字、(字母/数字);或数字、字母、(数字))或是否有其他可能的格式?
  • 可能的格式。我添加了关于此的新问题,请查看stackoverflow.com/questions/58023005/…@Nick

标签: mysql sorting


【解决方案1】:

这是最接近的:

SELECT res_no as res_no, 
   SUBSTRING(res_no,1,1) as _A, 
   SUBSTRING(res_no,2,1) as _B,
   SUBSTRING_INDEX(  SUBSTRING_INDEX(res_no, ')', 1), '(', -1) as _C   
FROM test
ORDER BY 
_A,
_B,
_C

【讨论】:

    【解决方案2】:

    使用order by 子句进行排序。

    查询:

    SELECT * FROM mytable order by res_no;
    

    【讨论】:

      【解决方案3】:

      我不确定你想要实现什么,但这是我能想到的最接近的东西。

      SELECT yes_no, 
         SUBSTRING(yes_no,1,1) , 
         SUBSTRING_INDEX(  SUBSTRING_INDEX(yes_no, ')', 1), '(', -1)   
      FROM new_table
      ORDER BY
           SUBSTRING(yes_no,1,1),
           SUBSTRING_INDEX(  SUBSTRING_INDEX(yes_no, ')', 1), '(', -1)   
      

      【讨论】:

        【解决方案4】:

        此查询将帮助您获得所需的结果。为了获得一致的结果,我曾经修剪行。这里我根据第一个字母/数字分隔表格

        SELECT 
          dr.res AS res_no 
        FROM
          (
            (SELECT 
              1 fake_order,
              TRIM(a.res_no) AS res,
              0 AS sub 
            FROM
              table_name_here AS a 
            HAVING res REGEXP '^[0-9]+' 
            ORDER BY res ASC) 
            UNION
            (SELECT 
              2 fake_order,
              TRIM(b.res_no) AS res,
              TRIM(
                SUBSTRING_INDEX(
                  SUBSTRING_INDEX(res_no, ')', 1),
                  '(',
                  - 1
                )
              ) AS sub 
            FROM
              table_name_here AS b 
            HAVING res REGEXP '^[a-z]+' 
            ORDER BY sub ASC,
              res ASC)
          ) AS dr 
        ORDER BY dr.fake_order ASC,
          CASE
            dr.fake_order 
            WHEN 1 
            THEN dr.res 
            ELSE dr.sub 
          END ASC ;
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-09-23
          • 1970-01-01
          • 1970-01-01
          • 2021-12-24
          • 1970-01-01
          • 1970-01-01
          • 2021-02-17
          • 1970-01-01
          相关资源
          最近更新 更多