Sql ORACLE-如果列仅包含字符串,则为True,否则为False

Sql ORACLE-如果列仅包含字符串,则为True,否则为False,sql,regex,oracle,oracle11g,Sql,Regex,Oracle,Oracle11g,假设我有两列,第一列包含字母数字以及混合字符,例如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' f

假设我有两列,第一列包含字母数字以及混合字符,例如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;
这可能会有帮助

with temp(name,numb) as 
(select 'abc',123456789 from dual
union select '123abc',123 from dual
union select '1abc3',123 from dual
union select 'abc3',123 from dual
union select 'ab3c',123 from dual)
select name,case when regexp_like(name, '^[a-zA-Z]*$') and 
regexp_like(numb, '^[^a-zA-Z]*$') and length(to_char(numb))=9 then 'true' else 'false' end from temp;

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

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

我想你是想问以下问题:

with temp(str,nr) as
 (select 'abc' str,123456789 nr
    from dual
  union
  select '123abc$',12345678
    from dual
  union
  select '1abc3#' ,1234567
    from dual
  union
  select 'abc3'   ,123456
    from dual
  union
  select 'ab3c'   ,12345 
    from dual)
select case when ( t.str = regexp_substr(str,'[a-zA-Z]+') and length(nr)=9 ) then 'True' 
            else 'False' 
        end result,
       str, nr 
  from temp t
 order by length(nr) desc;

RESULT  STR        NR
------  -------    ---------
True    abc        123456789
False   123abc$    12345678
False   1abc3#     1234567
False   abc3       123456
False   ab3c       12345

如果您想检查第二列是否为数字且其长度是否为9,这可能是一个更好的解决方案。您所说的“第一列”和“第二列”是什么意思?您的示例数据只有一列。如果您指的是第一行和第二行,那么如何确定行的顺序?