我有一个oracle数据字段,我需要从中提取节名(2-4个字符)和节号(总是4个数字)。
我的数据看起来像这样:
MATH 1175 Calculus II
MATH 1153 Statistical Reasoning
ENGL 1101 Writing and Rhetoric I
FIN 1115 Personal Finance
SPAN 1102 Elementary Spanish II
POLS 1102 Intro to Politics Critical Thinking & Analysis
MA 0104 Intro to Medical Assisting Administrative
HO 0107 Medical Law and Ethics
在Oracle中,我已经成功地使用以下语句提取了部分:
REGEXP_SUBSTR(instance_name,'^[A-Z]{2,4}') ISU_SUBJECT
注意:instance_name是包含字段数据的列的名称(如上所述)。
要提取接下来的四个数字,只需提取\d{4}即可。但是,RegEx不支持可变长度的向后查找。所以我会尝试下面的代码来获得三种不同长度的可能性。它可以使用正则表达式测试,但我无法让它在Oracle SQL Developer中工作。我想下面的代码可以提取4个字符的部分编号。但这不起作用:
,REGEXP_SUBSTR(instance_name,'(?<=^[A-Z]{4} )\d{4}') ISU_Course_Number
当然,这也是行不通的
,REGEXP_SUBSTR(instance_name,'((?<=^[A-Z]{4} )|(?<=^[A-Z]{3} )|(?<=^[A-Z]{2} ))\d{4}') ISU_Course_Number
有什么办法让这个号码提取工作吗?
2条答案
按热度按时间ars1skjm1#
这两行成功地将主题和课程编号提取到单独的字段中:
jei2mxaa2#
如果所有行看起来都像您作为示例数据发布的行,则:如果你可以使用简单快速的
substr
+instr
组合,为什么要把事情变得复杂和潜在的缓慢呢?将所有内容提取到第二个空格:
如果你需要将值分成两列(我不明白你想要两列),也没有问题。
仍然是
substr
+instr
(尽管现在有点复杂):或者,简单的正则表达式:从
instance_name
中获取第一个和第二个 * 字 *。它们是什么数据类型并不重要,这是源字符串的前两部分: