假设我有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;
答案 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();