PLSQL中的正则表达式

时间:2018-05-05 14:53:38

标签: sql regex oracle

有人可以帮我在sql中使用正则表达式来实现以下场景

需要检查特定列是否有任何字符串/符号(除了数字)值,然后它应该抛出错误或任何东西。目前已经使用

to_number(列) - 但如果它只以字符串开头,则不会抛出错误,否则它会允许。

2 个答案:

答案 0 :(得分:1)

以下是使用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

答案 1 :(得分:1)

您想要的是列上的check约束。这看起来像是:

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

check约束将使数据库为您验证数据。这是实现此类检查以确保数据完整性的最佳方式。