regexp_substr не работает при изменении значения - PullRequest
0 голосов
/ 27 июня 2019

Мне нужны минимальные и максимальные оценки для каждого студента.Ниже приведены примеры меток, я хочу, чтобы uc_min был как раньше, а uc_max как и после /

Ниже мой код, он не работает для одной цифры

select distinct  regexp_substr(marks,'[^/]+',1,1) uc_min, 
        regexp_substr(marks,'[^/]+',4,1)  uc_max
   from std
  where student_id = 'YYY'

Ожидаемый результат:

Sample marks   Expected uc_min    Expected uc_max
1/100          1                  100
20/30          20                 30
180/730        180                730
20/200         20                 200

Ответы [ 2 ]

0 голосов
/ 27 июня 2019

Попробуйте это:

WITH MARKS (SAMPLE_MARKS) AS 
(SELECT '1/100' FROM DUAL UNION ALL
SELECT '20/30' FROM DUAL UNION ALL
SELECT '180/730' FROM DUAL UNION ALL
SELECT '20/200' FROM DUAL)
SELECT DISTINCT
    SAMPLE_MARKS,
    REGEXP_SUBSTR(SAMPLE_MARKS, '[^/]+', 1, 1) UC_MIN,
    REGEXP_SUBSTR(SAMPLE_MARKS, '[^/]+', 1, 2) UC_MAX -- start point(1) and position(2) was incorrect in your code 
FROM
    MARKS

enter image description here

db <> fiddle demo

Ура !!

0 голосов
/ 27 июня 2019

A substr/ instr решение, при условии, что существует один "/"

select substr(marks, 1, instr(marks,'/') - 1) as uc_min,
       substr(marks, instr(marks,'/') + 1) as uc_max
from std;

DEMO

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...