2016-04-23 25 views
0
SELECT program.prg_field AS "College" 
     , program.prg_name AS "Major" 
     , professor.pr_id AS "Professor ID" 
     , professor.pr_name AS "Advisor" 
     FROM professor 
INNER JOIN program ON program.prg_field = professor.pr_college 
    WHERE professor.pr_id LIKE '%3%' 
    ORDER BY "College" 
     , "Major" 
     ; 

我的问题,我想通过订购的pr_id列是这样的(例如:ACCT3332) ,我必须挑出第一个NUMBER并过滤掉只显示以3开头的数字的课程。我需要列出所有的顾问对3000门课程和大学,主要为了我的升序排列结果

+0

是否'pr_id'有特定的格式(即4个字母字符然后4位数字)或可以改变? – MT0

回答

1

您可以使用REGEXP_LIKE而不是LIKE

SELECT program.prg_field AS "College" 
     , program.prg_name AS "Major" 
     , professor.pr_id AS "Professor ID" 
     , professor.pr_name AS "Advisor" 
     FROM professor 
INNER JOIN program ON program.prg_field = professor.pr_college 
    WHERE REGEXP_LIKE(professor.pr_id, '^\D+3') 
    ORDER BY "College" 
     , "Major" 
     ; 

如果pr_id的格式为4个字母字符,那么4位,那么你也可以这样做:

 WHERE SUBSTR(professor.pr_id, 5, 1) = '3') 

或(如由戈登·利诺夫建议)

 WHERE professor.pr_id LIKE '____3%' 
+0

工作!谢谢! – Deniz

+0

如果它总是第四个字符,你也可以使用'like'____ 3%''。 –

+0

@Deniz如果这个问题或其他答案已经解决了您的问题,那么您可以接受答案(使用答案旁边的投票按钮下面的复选标记)来表示问题已关闭。如果它没有回答你的问题,那么你可以发表评论,详细说明未解决的问题。 – MT0

0

删除let先从pr_id列值开始。您有以下选择:

  • 如果有一小部分可能的前缀码的REPLACE功能名称
  • TRANSLATE功能,如果你知道字符在OCDE指定
  • 的前缀使用性质
  • REGEXP_REPLACE如果你什么都不知道,但有一个数字。

修改后的查询:

SELECT program.prg_field AS "College" 
     , program.prg_name AS "Major" 
     , professor.pr_id AS "Professor ID" 
     , professor.pr_name AS "Advisor" 
     FROM professor 
INNER JOIN program ON program.prg_field = professor.pr_college 
    WHERE TRANSLATE(UPPER(professor.pr_id), '1ABCDEFGHIJKLMNOPQRSTUVWXYZ', '1') LIKE '3%' 
    ORDER BY "College" 
     , "Major" 
     ; 

......或者......

 WHERE REPLACE(...REPLACE(professor.pr_id, 'ACCT'), ...) LIKE '3%' 

......或者......

 WHERE REGEXP_LIKE(professor.pr_id, '^[^0-9]*3') 
相关问题