我有一种情况,我们需要检查字符串是否具有“ |” 是否分隔值(如果不是),则将这些行标记为“错误”。
虚拟数据就像-
create table test_2 (acc_no number, prod_svc varchar2(100), done varchar2(50));
insert into test_2 values (1001, '1234_first', null);
insert into test_2 values (1002, '1234_first|5678_secong', null);
insert into test_2 values (1001, '1234_first:5678_second', null);
现在,在这3行中,第一行和第二行都没有错误,而第三行是错误的,因为有':'作为分隔符。
为此,我编写了一个查询,该查询仅在存在“ |”时有效 但是当有单个值(即第一行)时不存在
update test_2
set done = 'prevalidation-error'
where acc_no in( select acc_no
from test_2
where instr(prod_svc, '|') < 1) ;
我的此更新语句将第1和第3标记为错误,而不应将第1行标记为错误,因为那只是一个值。正如我们所见,我的查询非常适合该情况,可能是我们需要为此编写一个PLSQL块,但仍然无法找出一种方式,我将如何知道prod_svc列是否只有1个值,并且必须是正确的!
我正在使用--- Oracle Database 12c企业版12.1.0.2.0版-64位生产
您似乎在寻找除字母,数字,下划线或竖线以外的其他任何字符。因此使用regexp_like()
:
update test_2
set done = 'prevalidation-error'
where regexp_like(acc_no, '[^|a-zA-Z0-9_]');
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句