检查值是否为“|”在 SQL 字符串中分隔
Check if the values are '|' separated in SQL string
我有一个场景需要检查字符串是否有“|”是否分隔值,如果不是,则将这些行标记为 '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 行中,第 1 行和第 2 行没有错误,而第 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_]');
当您想排除示例“,;:”的分隔符时
UPDATE test_2
SET done = 'prevalidation-error'
WHERE REGEXP_COUNT (prod_svc, '[,;:]') > 0
我有一个场景需要检查字符串是否有“|”是否分隔值,如果不是,则将这些行标记为 '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 行中,第 1 行和第 2 行没有错误,而第 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_]');
当您想排除示例“,;:”的分隔符时
UPDATE test_2
SET done = 'prevalidation-error'
WHERE REGEXP_COUNT (prod_svc, '[,;:]') > 0