Sql 返回字段仅包含字母(无数字)字符的行

Sql 返回字段仅包含字母(无数字)字符的行,sql,oracle,Sql,Oracle,我要把它简单化。这是针对Oracle SQL的。我有一个带有USER\u ID列的表 用户id长度不同,为VARCHAR。某些用户ID中包含字母和数字。有些只有字母 用户名示例:DAVIDMR和JOHNS5423 我需要有两个独立的查询:一个返回用户ID,其中没有任何数字;另一个返回用户ID,其中必须包含数字 我尝试了各种各样的排列,其中用户ID不喜欢“%[0-9]”,但它要么不返回任何记录,要么返回所有记录。您可以使用REGEXP\u LIKE 对于用户id中没有数字的用户: select *

我要把它简单化。这是针对Oracle SQL的。我有一个带有
USER\u ID
列的表

用户id长度不同,为
VARCHAR
。某些用户ID中包含字母和数字。有些只有字母

用户名示例:DAVIDMR和JOHNS5423

我需要有两个独立的查询:一个返回用户ID,其中没有任何数字;另一个返回用户ID,其中必须包含数字


我尝试了各种各样的
排列,其中用户ID不喜欢“%[0-9]”
,但它要么不返回任何记录,要么返回所有记录。

您可以使用
REGEXP\u LIKE

对于用户id中没有数字的用户:

select *
from t
where not regexp_like(USER_ID, '[[:digit:]]');
select *
from t
where regexp_like(USER_ID, '[[:digit:]]');
select *
from t
where length(user_id) = length(translate(user_id,' 1234567890',' '));
select *
from t
where length(user_id) <> length(translate(user_id,' 1234567890',' '));
对于用户id中的数字:

select *
from t
where not regexp_like(USER_ID, '[[:digit:]]');
select *
from t
where regexp_like(USER_ID, '[[:digit:]]');
select *
from t
where length(user_id) = length(translate(user_id,' 1234567890',' '));
select *
from t
where length(user_id) <> length(translate(user_id,' 1234567890',' '));
另一种方法是使用
翻译

对于用户id中没有数字的用户:

select *
from t
where not regexp_like(USER_ID, '[[:digit:]]');
select *
from t
where regexp_like(USER_ID, '[[:digit:]]');
select *
from t
where length(user_id) = length(translate(user_id,' 1234567890',' '));
select *
from t
where length(user_id) <> length(translate(user_id,' 1234567890',' '));
对于用户id中有数字的用户:

select *
from t
where not regexp_like(USER_ID, '[[:digit:]]');
select *
from t
where regexp_like(USER_ID, '[[:digit:]]');
select *
from t
where length(user_id) = length(translate(user_id,' 1234567890',' '));
select *
from t
where length(user_id) <> length(translate(user_id,' 1234567890',' '));
选择*
从t
其中长度(user_id)长度(translate(user_id,'1234567890','');

您可以像使用
一样使用
REGEXP\u

对于用户id中没有数字的用户:

select *
from t
where not regexp_like(USER_ID, '[[:digit:]]');
select *
from t
where regexp_like(USER_ID, '[[:digit:]]');
select *
from t
where length(user_id) = length(translate(user_id,' 1234567890',' '));
select *
from t
where length(user_id) <> length(translate(user_id,' 1234567890',' '));
对于用户id中的数字:

select *
from t
where not regexp_like(USER_ID, '[[:digit:]]');
select *
from t
where regexp_like(USER_ID, '[[:digit:]]');
select *
from t
where length(user_id) = length(translate(user_id,' 1234567890',' '));
select *
from t
where length(user_id) <> length(translate(user_id,' 1234567890',' '));
另一种方法是使用
翻译

对于用户id中没有数字的用户:

select *
from t
where not regexp_like(USER_ID, '[[:digit:]]');
select *
from t
where regexp_like(USER_ID, '[[:digit:]]');
select *
from t
where length(user_id) = length(translate(user_id,' 1234567890',' '));
select *
from t
where length(user_id) <> length(translate(user_id,' 1234567890',' '));
对于用户id中有数字的用户:

select *
from t
where not regexp_like(USER_ID, '[[:digit:]]');
select *
from t
where regexp_like(USER_ID, '[[:digit:]]');
select *
from t
where length(user_id) = length(translate(user_id,' 1234567890',' '));
select *
from t
where length(user_id) <> length(translate(user_id,' 1234567890',' '));
选择*
从t
其中长度(user_id)长度(translate(user_id,'1234567890','');

我认为你需要像这里一样使用
REGEXP\u
我认为你需要像这里一样使用
REGEXP\u
。。。