Регулярное выражение в PLSQL - PullRequest
0 голосов
/ 05 мая 2018

Может кто-нибудь помочь мне использовать регулярное выражение в SQL для следующего сценария

Нужно проверить, входит ли какое-либо значение строки / символов (кроме числа) для определенного столбца, тогда оно должно выдать ошибку или что-то еще. В настоящее время использовали

to_number (column) - но он не выдает ошибку, если он начинается только со строки, в противном случае он разрешает.

Ответы [ 2 ]

0 голосов
/ 05 мая 2018

Требуется ограничение check для столбца. Это будет выглядеть так:

alter table t add constraint chk_t_col
    check (regexp_like(col, '^[0-9]*$'));

Ограничение check будет иметь базу данных для проверки данных для вас. Это лучший способ реализовать такую ​​проверку для обеспечения целостности данных.

0 голосов
/ 05 мая 2018

Ниже приведен другой сценарий с функцией REGEX и функцией TO_NUMBER.

REXEX действительный номер сценария:

SELECT 1 FROM DUAL WHERE REGEXP_LIKE('1234', '^\d+(\.\d+)?$', '');
1234

Сценарий неверного номера REXEX:

SELECT 1 FROM DUAL WHERE REGEXP_LIKE('AS1234#$', '^\d+(\.\d+)?$', '');
no data found

SELECT 1 FROM DUAL WHERE REGEXP_LIKE('$', '^\d+(\.\d+)?$', '');
no data found

TO_NUMBER действительный сценарий:

select to_number('123') from dual;

TO_NUMBER неверный сценарий:

select to_number('123d') from dual;
select to_number('.23.') from dual;
select to_number('asdf') from dual;

ORA-01722: invalid number
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...