SELECT行GROUP BY某种正则表达式格式

时间:2014-05-17 11:17:38

标签: mysql regex

我的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

也就是说,它由Regex组成 [A-Z]*\d+

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

由于

1 个答案:

答案 0 :(得分:2)

使用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

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