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

时间:2018-06-06 04:34:22

标签: sql regex oracle oracle11g

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

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

你可以帮助我吗?

以下是您可以修改的查询

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;

3 个答案:

答案 0 :(得分:5)

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

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

这将空字符串视为字符串;如果你想为空字符串弄错,你可能想要[[: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

答案 1 :(得分:2)

这可能会有所帮助

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;

答案 2 :(得分:1)

我认为您正在尝试以下内容:

var result = db.SomeTable.GroupBy(x => new
                    {
                       x.Name,
                       x.SourceDeviceId
                    })
             .Select(x => x.Key)
             .ToList();

SQL Fiddle Demo