我会过度简化。这适用于Oracle SQL。我有一个包含USER_ID
列的表格。
User_id的长度不同,为VARCHAR
。某些用户ID中包含字母和数字。有些只有字母。
USER_NAME示例:DAVIDMR和JOHNS5423
我需要有两个单独的查询:一个返回USER_ID,其中没有任何数字,另一个USER_ID必须有一个数字。
我尝试了WHERE USER_ID NOT LIKE '%[0-9]%'
的各种排列,但它不返回任何记录或返回所有记录。
答案 0 :(得分:3)
您可以使用REGEXP_LIKE
。
对于那些没有user_id数字的人:
select *
from t
where not regexp_like(USER_ID, '[[:digit:]]');
用于在user_id中包含数字:
select *
from t
where regexp_like(USER_ID, '[[:digit:]]');
另一种方法是使用TRANSLATE
:
对于那些没有user_id数字的人:
select *
from t
where length(user_id) = length(translate(user_id,' 1234567890',' '));
对于user_id中有数字的人:
select *
from t
where length(user_id) <> length(translate(user_id,' 1234567890',' '));