ORACLE-如果Column只包含String,则True为False

May*_*wal 0 regex sql oracle oracle11g

假设我有2列,第一列包含字母数字和字符混合,例如.abc12 $$,abc,123,re12.第二列仅包含数字,但长度不同.

我必须找到第一列是否只包含字母,第二列只包含9位数,然后是True,否则为False

你可以帮助我吗?

以下是您可以修改的查询

with temp(name) as (select 'abc' from dual
union select '123abc' from dual
union select '1abc3' from dual
union select 'abc3' from dual
union select 'ab3c' from dual)
select * from temp;
Run Code Online (Sandbox Code Playgroud)

Ale*_*sej 5

要检查列是否仅包含字符,您可以使用:

case when regexp_like(aColumn, '^[[:alpha:]]*$') then 'true' else 'false' end
Run Code Online (Sandbox Code Playgroud)

这将空字符串视为字符串; 如果你想为空字符串弄错,你可能想编辑[[:alpha:]]*[[:alpha:]]+.

这个怎么运作:

  • ^:字符串的开头
  • [[:alpha:]]* 零个或多个字母字符
  • $:字符串的结尾

要检查第二列是否只包含9位数字,您可能需要

case when regexp_like(aColumn, '^\d{9}$') then 'true' else 'false' end
Run Code Online (Sandbox Code Playgroud)

这里的\d{9}意思是"恰好9次出现一个数字".

您可以轻松地使用这两个表达式一起执行两个检查,例如

case
  when regexp_like(column_1, '^[[:alpha:]]*$')  AND
       regexp_like(column_2, '^\d{9}$')
  then 'true'
  else 'false'
end
Run Code Online (Sandbox Code Playgroud)