我有一个表列,它由一个逗号分隔的短整数列表组成。
我正在尝试构建一个用于报告目的的查询,用于标识包含以下内容的行数:
以下是我到目前为止(我只能算出前导零):
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;
我正在寻找适合第二和第三种情况的正则表达式。
注意:此列仅包含整数,而不包含小数/浮点数。
答案 0 :(得分:1)
尝试:
,0+,|^0+,|,0+$
^(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 $
- 字符串结尾