我要过分简化。这是针对Oracle SQL的。我有一个带有USER_ID
列的表。
User_id的长度变化,为VARCHAR
。一些用户ID中有字母和数字。有些只有字母。
user_name示例:Davidmr和Johns5423
我需要有2个单独的查询:一个返回没有任何数字的User_id,一个user_id必须有一个数字。
我已经尝试了WHERE USER_ID NOT LIKE '%[0-9]%'
的各种排列,但是它要么返回任何记录,要么返回所有记录。
您可以使用REGEXP_LIKE
。
对于没有数字的
:
select *
from t
where not regexp_like(USER_ID, '[[:digit:]]');
在用户_id中有数字:
select *
from t
where regexp_like(USER_ID, '[[:digit:]]');
另一种方法是使用TRANSLATE
:
对于没有数字的
:
select *
from t
where length(user_id) = length(translate(user_id,' 1234567890',' '));
对于在用户_id中具有数字的人:
select *
from t
where length(user_id) <> length(translate(user_id,' 1234567890',' '));