テキスト文字列から数値を抽出し、別のテーブルに結合しようとしています。ここで私がこれまで持っているものです。結合で使用するテキスト文字列をデコードする
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
私はいくつかの他のスレッドを読んで(常に左括弧の前に来る)番号を取り除く方法を考え出しました。問題は
9(A) - check
10(A) - check
なく
5-6(A)
5-6(A)、カラム・sect.expressionに住んでデータの3つのスタイルの2のために、このアカウントのみがキックバックだろうということですOracle 01722無効な番号のエラーです。 substr ...行を変更する方法はありますか?5-6(A)データ型の場合、最初の数値(5)を取得してそれに参加するようにしますか?
私はこのテーブルの読み取り権しか持っていないので、何らかのヘルパーテーブル/カラムの作成に依存するソリューションは動作しません。
ありがとうございます!
これはあまりにも読み込みに問題があります。対応する「period_number」列をテーブル期間と同じデータタイプを使用します。オプティマイザは、SUBSTR(col、x、x)で収集した統計を効率的に使用して結合選択性を計算することはできません。これは、誤った計算の結果、実行計画が異なる場合にのみ問題になります。 – Ronnis