首页 > 解决方案 > 在 SQL 中过滤字母数字字符串

问题描述

我已经检查了相关问题并尝试了那里的解决方案,但没有一个有效。

我有一列需要过滤每个字母数字字符串,模式无关紧要,只要找到字母和数字,就需要过滤掉。我已经尝试过使用 regex ^(?=[A-Za-z0-9])[A-Za-z0-9]+$[^a-zA-Z\d\s:](使用双重否定),但我的输出中仍然有一堆字母数字字符串。

我使用的最后一个查询是

SELECT distinct ID
FROM TABLE
where ID like '^(?=[A-Za-z0-9])[A-Za-z0-9]+$' and ID is not null

我已经玩过反转like但无济于事,它仍然输出字母数字字符串。如果有帮助,这是使用雪花。

标签: sqlregexsnowflake-cloud-data-platform

解决方案


如果您想要正则表达式,请使用regexp

where id regexp '^(?=[A-Za-z0-9])[A-Za-z0-9]+$'

like不是用于正则表达式,而是用于 SQL 模式匹配。它唯一的通配符是_and %

如果你想要一个字母和一个数字,那么这可能更简单:

where id regexp '[a-zA-Z]' and id regexp '[0-9]'

或者作为一种表达方式:

where id regexp '([a-zA-Z].*[0-9])|([0-9].*[a-zA-Z])'

如果您只想要字母和数字:

where id not regexp '[^a-zA-Z0-9]'

推荐阅读