НАЙТИ, если пятая позиция - это буква, а не цифра, используя ORACLE - PullRequest
0 голосов
/ 27 ноября 2018

Как я могу найти, если пятая позиция - это буква, а не число, использующая Oracle?

В моей последней попытке использовалось следующее утверждение:

REGEXP_LIKE (table_column, '([abcdefghijklmnopqrstuvxyz])');

Ответы [ 4 ]

0 голосов
/ 28 ноября 2018

Еще один способ сделать это:

regexp_like(table_column, '^....[[:alpha:]]')

Использование класса символов [[: alpha:]] подберет все буквы в верхнем, нижнем регистре, с ударением и т. Д., Но будет игнорировать цифры,знаки пунктуации и пробелы.

Если вас беспокоит то, что символ не является числом, используйте

not regexp_like(table_column, '^....[[:digit:]]')

или

not regexp_like(table_column, '^....\d')
0 голосов
/ 27 ноября 2018

Возможно, вы бы предпочли проверить, содержит ли 5-я позиция число (что означает, что это не что-то еще ), т.е. сделать то, что вы делаете сейчас.

Почему?Потому что «буква» не только ASCII;взгляните на 4-ую строку в моем примере - она ​​содержит хорватские символы, и они не находятся между [az] (и [AZ]).

SQL> with test (col) as
  2    (select 'abc_3def' from dual union all
  3     select 'A435D887' from dual union all
  4     select '!#$%&/()' from dual union all
  5     select 'ASDĐŠŽĆČ' from dual
  6    )
  7  select col,
  8    case when regexp_like(substr(col, 5, 1), '\d+') then 'number'
  9         else 'not a number'
 10    end result
 11  from test;

COL           RESULT
------------- ------------
abc_3def      number
A435D887      not a number
!#$%&/()      not a number
ASDĐŠŽĆČ      not a number

SQL>
0 голосов
/ 27 ноября 2018

Привязка к началу строки, иначе вы можете получить неожиданные результаты.Это работает, но удаляет каретку (начало привязки строки) и возвращает «ИСТИНА»!Обратите внимание, что он использует регистрозависимый флаг 'i'.

select 'TRUE'
from dual
where regexp_like('abcd4fg', '^.{4}[A-Z]', 'i');
0 голосов
/ 27 ноября 2018

Попробуйте:

REGEXP_LIKE (table_column, '^....[a-z]')

Или:

SUBSTR (table_column, 5, 1 ) BETWEEN 'a' AND 'z'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...