【问题标题】:SELECT rows GROUP BY a certain regex formatSELECT rows GROUP BY 某种正则表达式格式
【发布时间】:2014-05-17 11:17:37
【问题描述】:

我的 MySQL 数据库中有一个表,它有一个列 product_name,它有像

这样的行
KK004A
KK004B
KK004C
KK007
N01002X/G
N01005X/G
N01005Y/G
N01005Z/G
002A
002B

我想 GROUP BY 以便它返回:

KK004A
KK007
N01002X/G
N01005X/G
002A

也就是说,它按正则表达式分组 [A-Z]*\d+

我该怎么做?我对非正则表达式方式持开放态度

谢谢

【问题讨论】:

    标签: mysql regex


    【解决方案1】:

    这就是你可以使用Finding number position in string 中的技术来做的事情

    SELECT 
      val
      from test
      group by 
      SUBSTRING( 
        val,1,(LENGTH(val)+1)-LEAST (
          if (Locate('0',reverse(val)) >0,Locate('0',reverse(val)),999),
          if (Locate('1',reverse(val)) >0,Locate('1',reverse(val)),999),
          if (Locate('2',reverse(val)) >0,Locate('2',reverse(val)),999),
          if (Locate('3',reverse(val)) >0,Locate('3',reverse(val)),999),
          if (Locate('4',reverse(val)) >0,Locate('4',reverse(val)),999),
          if (Locate('5',reverse(val)) >0,Locate('5',reverse(val)),999),
          if (Locate('6',reverse(val)) >0,Locate('6',reverse(val)),999),
          if (Locate('7',reverse(val)) >0,Locate('7',reverse(val)),999),
          if (Locate('8',reverse(val)) >0,Locate('8',reverse(val)),999),
          if (Locate('9',reverse(val)) >0,Locate('9',reverse(val)),999)
        )
      )
    ;
    

    DEMO

    您需要更改上述查询中的表名和列名。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-08-19
      • 1970-01-01
      • 1970-01-01
      • 2012-01-06
      • 2021-09-04
      • 2012-07-15
      • 2016-11-28
      相关资源
      最近更新 更多