Преобразовать результат выражения CASE в число в Oracle SQL - PullRequest
0 голосов
/ 13 февраля 2020

У меня следующий запрос select. Я хочу преобразовать из string в number. Если я оберну TO_NUMBER вокруг выражения case, я получу

выражение должно иметь тот же тип данных, что и соответствующее выражение

error .

SELECT CASE SUBSTR(GRADE, INSTR(GRADE, ' ') + 1) 
         WHEN 'Unspecified' THEN ' '
         ELSE SUBSTR(GRADE, INSTR(GRADE, ' ') + 1) 
       END as Final_Grade,

Как я могу получить Final_Grade, чтобы быть numeric?

Спасибо!

1 Ответ

1 голос
/ 13 февраля 2020

Ну, ' ' - это не число, так что лучше подумайте, что делать. Я бы предложил NULL:

SELECT (CASE SUBSTR(GRADE, INSTR(GRADE, ' ') + 1) 
           WHEN 'Unspecified' THEN NULL
           ELSE TO_NUMBER(SUBSTR(GRADE, INSTR(GRADE, ' ') + 1)) 
        END) as Final_Grade,

На самом деле, я предпочитаю:

(CASE WHEN GRADE NOT LIKE 'Unspecified%'
      THEN TO_NUMBER(SUBSTR(GRADE, INSTR(GRADE, ' ') + 1)) 
 END) as Final_Grade

Или, возможно, даже более безопасно:

(CASE WHEN REGEXP_LIKE(GRADE, '^[0-9]+ ')
      THEN TO_NUMBER(SUBSTR(GRADE, INSTR(GRADE, ' ') + 1)) 
 END) as Final_Grade
...