首页 > 解决方案 > ORACLE - 如果列仅包含字符串,则为真,否则为假

问题描述

假设我有 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;

标签: sqlregexoracleoracle11g

解决方案


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

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

这将空字符串视为字符串;如果您想为空字符串获取 false,您可能需要编辑[[:alpha:]]*[[:alpha:]]+.

这个怎么运作:

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

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

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

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

您可以轻松地使用这两个表达式同时进行两项检查,例如

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

推荐阅读