我有一个字段,在一列中有多个值,用管道(|)分隔符分隔,如下所示:
PR|20078|ABBV|Ven|1|PS|1|DFT|功效|1|0|W1|Key22 CLL EASTERN|石蕊膏ID: 865avvwr|2022-04-28">
我要提取"石蕊"ID: 865avvwr">
该值可以显示在数据中的任意两个管道分隔符之间。你能帮帮我吗?
谢谢,阿奴
我尝试使用REGEXP_SUBSTR,但我没有得到语法正确。
选项1 -使用regex substr()提取单词,但如果在Litmus
之后有多个单词,则使用选项2。
select regexp_substr('W1|Key22 CLL EASTERN|Litmus ID: 865avvwr|2022-04-28','Litmus ID\W+(\w+)', 1, 1, 'e', 1)
选项2 -
你可以使用正则表达式instr, substring,然后像下面这样分割部分。
split_part(
substr(mycol,
regexp_instr(mycol,'Litmus ID')
)
,'|',1
) output
regexp_instr()
-用于确定单词Litmus ID
的位置,substr()
-用于从该点开始剪切字符串,如Litmus ID: abcxyz|othrs
split_part()
-用于基于|分割数据并显示第一部分-类似Litmus ID: abcxyz
。
示例SQL
select split_part(
substr('W1|Key22 CLL EASTERN|Litmus ID: 865avvwr|2022-04-28',
regexp_instr('W1|Key22 CLL EASTERN|Litmus ID: 865avvwr|2022-04-28','Litmus ID'))
,'|',1
) c