有人可以帮我在sql中使用正则表达式来实现以下场景
需要检查特定列是否有任何字符串/符号(除了数字)值,然后它应该抛出错误或任何东西。目前已经使用
to_number(列) - 但如果它只以字符串开头,则不会抛出错误,否则它会允许。
答案 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
约束将使数据库为您验证数据。这是实现此类检查以确保数据完整性的最佳方式。