检查值是否在 SQL 字符串中以"|"分隔



我有一个场景,我们需要检查字符串是否有'|'分隔值,如果没有,则将这些行标记为'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行中,第一行和第二行没有错误,而第三行是错误的,因为有":"作为分隔符。

为此,我写了一个查询,它只在有"|"时有效,但在有单个值时无效,即第一行

update test_2
   set done = 'prevalidation-error'
where acc_no in(  select acc_no
                      from test_2
                     where instr(prod_svc, '|') < 1) ;

我的this update语句将第一行和第三行标记为错误,而不应将第一行标记为误差,因为这只是一个值。正如我们所看到的,我的查询非常适合这种情况,可能我们需要为此编写一个PLSQL块,但我仍然无法找到一种方法,我将如何知道prod_svc列是否只有1个值,并且这必须是正确的!

我正在使用---Oracle Database 12c Enterprise Edition Release 12.1.0.2.0-64位生产

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

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

当您想排除示例',:'的分隔符时

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

相关内容

  • 没有找到相关文章

最新更新