ORACLE - если в столбце есть только строка, то True, иначе False. - PullRequest
0 голосов
/ 06 июня 2018

Предположим, у меня есть 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;

Ответы [ 3 ]

0 голосов
/ 06 июня 2018

Чтобы проверить, содержит ли столбец только символы, вы можете использовать:

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
0 голосов
/ 06 июня 2018

Я думаю, вы пытаетесь спросить следующее:

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

Демонстрация SQL Fiddle

0 голосов
/ 06 июня 2018

это может помочь

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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...