首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >解码要在联接中使用的文本字符串

解码要在联接中使用的文本字符串
EN

Stack Overflow用户
提问于 2011-01-05 04:31:35
回答 2查看 1K关注 0票数 2

我正在尝试从一个文本字符串中提取数字,并将其连接到另一个表。这是我到目前为止所知道的:

代码语言:javascript
运行
复制
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列中三种数据样式中的两种:

代码语言:javascript
运行
复制
9(A) - check  
10(A) - check

但不是

代码语言:javascript
运行
复制
5-6(A)

5-6(A)将返回Oracle 01722无效编号错误。有没有办法我可以修改这个子串...行,以便对于5-6(A)数据类型,它将获取第一个数字( 5)并连接该数字?

值得一提的是,我只有这个表的读权限,所以任何依赖于创建某种帮助器表/列的解决方案都不会起作用。

谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-01-05 04:47:37

您可以使用REGEXP_REPLACE

1)如果您只想提取数字:

代码语言:javascript
运行
复制
JOIN period p ON REGEXP_REPLACE(sect.expression, '[^0-9]', '') = p.period_number 

2)如果您想要匹配字符串开头的数字,而忽略后面出现的数字:

代码语言:javascript
运行
复制
JOIN period p ON REGEXP_REPLACE(sect.expression, '^(\d+)(.*)', '\1') 
票数 2
EN

Stack Overflow用户

发布于 2011-01-05 04:41:09

而不是成为Oracle 10g, you could use a regex

代码语言:javascript
运行
复制
JOIN period p ON REGEXP_SUBSTR(sect.expression, '^\d+', 1, 1) = p.period_number 

无可否认,我提供的正则表达式需要工作-它将获得字符串开头的第一个数字。如果您需要更复杂的正则表达式,我推荐这个站点:http://www.regular-expressions.info/tutorial.html

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4598133

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档