Oracle SQL中筛选非邮箱/10位手机号Token的方法及语句正确性咨询
筛选非邮箱/非手机号Token的Oracle SQL方案
当前语句的问题
你当前的语句TOKEN NOT LIKE '%@%' AND LENGTH(TOKEN) > 10存在两个明显缺陷:
- 遗漏了长度小于10的非邮箱、非手机号Token(比如长度为9的字符串,既不是邮箱也不是10位手机号,但会被当前语句排除)
- 未验证Token是否为纯数字:如果有长度为10但包含字母/符号的字符串,它本质不是手机号,但当前语句会把它当成手机号排除,不会被筛选出来
正确的筛选语句
要准确筛选出既非邮箱也非10位纯数字手机号的Token,需要结合长度校验和纯数字校验,使用Oracle的正则表达式函数REGEXP_LIKE:
SELECT Token FROM 你的表名 WHERE Token NOT LIKE '%@%' AND NOT (LENGTH(Token) = 10 AND REGEXP_LIKE(Token, '^[0-9]+$'));
语句说明
Token NOT LIKE '%@%':排除所有包含@的邮箱格式TokenLENGTH(Token) = 10:锁定长度为10的字符串REGEXP_LIKE(Token, '^[0-9]+$'):验证字符串是否为纯数字(^匹配开头,[0-9]+匹配1个及以上数字,$匹配结尾,确保整个Token都是数字)NOT (...):排除掉符合“10位纯数字”规则的手机号Token
扩展优化(可选)
如果你的手机号有更严格的规则(比如国内手机号以1开头),可以调整正则表达式进一步精准匹配:
SELECT Token FROM 你的表名 WHERE Token NOT LIKE '%@%' AND NOT (LENGTH(Token) = 10 AND REGEXP_LIKE(Token, '^1[0-9]{9}$'));
内容的提问来源于stack exchange,提问作者TechyA
相关产品推荐
相关产品推荐

