MySQL REGEXP匹配逗号分隔列表中的零

时间:2016-04-04 21:11:09

标签: mysql regex

我有一个表列,它由一个逗号分隔的短整数列表组成。

我正在尝试构建一个用于报告目的的查询,用于标识包含以下内容的行数:

  • 列表有前导零
  • list conatains zeros
  • list is all zeros

以下是我到目前为止(我只能算出前导零):

SELECT 
   COUNT(CASE WHEN col REGEXP '^0.*' THEN 1 ELSE NULL END) as leadingZeros,
   COUNT(CASE WHEN col REGEXP '....' THEN 1 ELSE NULL END) as containsZeros,
   COUNT(CASE WHEN col REGEXP '....' THEN 1 ELSE NULL END) as allZeros
FROM table;

我正在寻找适合第二和第三种情况的正则表达式。

注意:此列仅包含整数,而不包含小数/浮点数。

2 个答案:

答案 0 :(得分:1)

尝试:

  1. ,0+,|^0+,|,0+$

    • 在开始,中间和结尾为零的3个替代方案。
  2. ^(0,?)+$

    • ^$是主播
    • (0,?)+表示可能后跟逗号的多个零。

答案 1 :(得分:0)

  

列表包含零

由于您正在寻找整个单词匹配,请使用

REGEXP '[[:<:]]0+[[:>:]]'

模式匹配:

  • [[:<:]] - 领先的字边界
  • 0+ - 1个或多个0 s
  • [[:>:]] - 尾随字边界

请参阅regex demo(PCRE等效项仅用于演示目的)

  

列表全为零

您需要锚点^(字符串的开头)和$(字符串的结尾):

REGEXP '^0+(,0+)*$'

+表示发生一次或多次。

请参阅regex demo,说明:

  • ^ - 字符串开头
  • 0+ - 1个或多个0 s
  • (,0+)* - 零个或多个序列:
    • , - 逗号
    • 0+ - 一个或多个0 s
  • $ - 字符串结尾