我正在尝试从一个文本字符串中提取数字,并将其连接到另一个表。这是我到目前为止所知道的:
SELECT sect.id,
sect.section_number,
sect.expression,
p.abbreviation
FROM sections sect
JOIN period p ON SUBSTR(sect.expression, 1, (INSTR(sect.expression,'(')-1)) = p.period_number
AND p.schoolid = 73253
AND p.year_id = 20
JOIN courses c ON sect.course_number = c.course_number
WHERE sect.schoolid = 73253
AND sect.termid >= 2000
我读了一些其他的帖子,想出了如何去掉数字(总是在左括号之前)。问题是,这只说明了sect.expression列中三种数据样式中的两种:
9(A) - check
10(A) - check
但不是
5-6(A)
5-6(A)将返回Oracle 01722无效编号错误。有没有办法我可以修改这个子串...行,以便对于5-6(A)数据类型,它将获取第一个数字( 5)并连接该数字?
值得一提的是,我只有这个表的读权限,所以任何依赖于创建某种帮助器表/列的解决方案都不会起作用。
谢谢!
发布于 2011-01-05 04:47:37
您可以使用REGEXP_REPLACE
1)如果您只想提取数字:
JOIN period p ON REGEXP_REPLACE(sect.expression, '[^0-9]', '') = p.period_number
2)如果您想要匹配字符串开头的数字,而忽略后面出现的数字:
JOIN period p ON REGEXP_REPLACE(sect.expression, '^(\d+)(.*)', '\1')
发布于 2011-01-05 04:41:09
而不是成为Oracle 10g, you could use a regex:
JOIN period p ON REGEXP_SUBSTR(sect.expression, '^\d+', 1, 1) = p.period_number
无可否认,我提供的正则表达式需要工作-它将获得字符串开头的第一个数字。如果您需要更复杂的正则表达式,我推荐这个站点:http://www.regular-expressions.info/tutorial.html
https://stackoverflow.com/questions/4598133
复制相似问题