检查值是否为' |'在SQL字符串中分隔

时间:2016-04-14 11:57:12

标签: sql oracle oracle12c

我有一个场景,我们需要检查字符串是否有' |'如果没有分隔值,则将这些行标记为' error'。

虚拟数据就像 -

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行中,前两行不是错误,而第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位生产

2 个答案:

答案 0 :(得分:3)

您似乎在寻找除字母,数字,下划线或竖线之外的任何字符。所以使用regexp_like()

update test_2
   set done = 'prevalidation-error'
   where regexp_like(acc_no, '[^|a-zA-Z0-9_]');

答案 1 :(得分:0)

如果要排除样本',;:'

的分隔符
UPDATE test_2
   SET done = 'prevalidation-error'
 WHERE REGEXP_COUNT (prod_svc, '[,;:]') > 0