2

テキスト文字列から数値を抽出して、別のテーブルに結合しようとしています。これが私がこれまでに持っているものです:

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列に存在する3つのスタイルのデータのうちの2つだけを説明することです-

9(A) - check  
10(A) - check

だがしかし

5-6(A)

5-6(A)は、Oracle01722の無効な番号エラーをキックバックします。5-6(A)データ型の場合、最初の番号(5)を取得してそれを結合するように、substr ...行を変更する方法はありますか?

私はこのテーブルに対する読み取り権限しか持っていないため、ある種のヘルパーテーブル/列の作成に依存するソリューションは機能しません。

ありがとう!

4

2 に答える 2

2

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-04T20:47:36.803 に答える
2

Oracle 10g であるため、代わりに正規表現を使用できます。

JOIN period p ON REGEXP_SUBSTR(sect.expression, '^\d+', 1, 1) = p.period_number 

確かに、私が提供した正規表現には作業が必要です。文字列の先頭にある最初の数字を取得します。より複雑な正規表現が必要な場合は、次のサイトをお勧めします: http://www.regular-expressions.info/tutorial.html

于 2011-01-04T20:41:09.193 に答える