首页 > 解决方案 > 识别字符串由重复字符组成的记录

问题描述

我有兴趣识别字符串由 1 个重复字符组成的记录,例如 'AAA'、'ZZZZZ'、'EE' 但不是 'A'、'HELLO'、'APPLE'、'AABB'、'MM ALBERT '

以下正则表达式在我测试它时有效^(.)\1{1,}$ https://regex101.com/r/dT6dK8/46 但是当我在雪花中使用它时它不起作用。任何意见,将不胜感激。

我在雪花中测试的内容

SELECT 'AA' regexp '^(.)\1{1,}$' -- AS 'EXPECT TRUE'
       ,'AAA' regexp '^(.)\1{1,}$' -- AS 'EXPECT TRUE'
       ,'A' regexp '^(.)\1{1,}$' -- AS 'EXPECT FALSE'
       ,'AAAAA' regexp '^(.)\1{1,}$' -- AS 'EXPECT TRUE'
       ,'BBBB' regexp '^(.)\1{1,}$' -- AS 'EXPECT TRUE'
       ,'AABB' regexp '^(.)\1{1,}$' -- AS 'EXPECT FALSE'
       ,'HELLO' regexp '^(.)\1{1,}$' -- AS 'EXPECT FALSE'       
       ,'AAAAA' regexp '^(.)\1{1,}$' -- AS 'EXPECT TRUE'
       ,'BB BB' regexp '^(.)\1{1,}$' -- AS 'EXPECT FALSE'
;

参考 正则表达式以确定字符串是否为单个重复字符

标签: regexsnowflake-cloud-data-platform

解决方案


不使用正则表达式:

SELECT col, REPLACE(col, LEFT(col,1), '') = '' AND LENGTH(col) > 1
FROM (SELECT 'AA' AS col UNION ALL SELECT 'HELLO') t;

db<>小提琴演示

如果使用空字符串的第一个字符替换返回空字符串,则表示所有字符串都相同。


推荐阅读