декодирование текстовой строки для использования в соединении - PullRequest
2 голосов
/ 04 января 2011

Я пытаюсь извлечь число из текстовой строки и присоединить его к другой таблице.Вот что у меня есть:

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.Есть ли способ, которым я мог бы изменить строку substr ..., чтобы для типа данных 5-6 (A) он захватил бы первое число (5) и соединился с этим?

Стоит упомянутьчто у меня есть только права на чтение этой таблицы, поэтому любое решение, которое зависит от создания некоторой вспомогательной таблицы / столбца, не будет работать.

Спасибо!

Ответы [ 2 ]

2 голосов
/ 04 января 2011

Вы можете использовать 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') 
2 голосов
/ 04 января 2011

Будучи Oracle 10g, вы могли бы использовать вместо этого регулярное выражение :

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

Следует признать, что приведенное мной регулярное выражение нуждается в работе - оно получит первое число в начале строки,Если вам нужно более сложное регулярное выражение, я рекомендую этот сайт: http://www.regular -expressions.info / tutorial.html

...