Как задать маску формата в функции to_number() для знака минуса в начале или конце строки?
Есть символьная колонка, в которой могут быть представлены отрицательные значения в двух различных форматах: знак минуса в конце и, как обычно, в начале.
До сих пор пробовал следующее, но для каждого значения, один из них выводит ошибку формата, а другой работает, и наоборот:
SELECT
str,
to_number(str, 'fm999.99mi') AS opt1,
to_number(str, 'fm999.99') AS opt2
FROM (
SELECT '-92.93' AS str FROM dual
UNION ALL
SELECT '92.93-' AS str1 FROM dual)
ORA-01722: invalid number
Ожидаемый вывод:
| str | opt1 | opt2 |
|---|---|---|
| -92.93 | -92.93 | -92.93 |
| 92.93- | -92.93 | -92.93 |
Можно ли обединить их, чтобы работало для обоих числовых форматов?
PS: версия 12.1.0.2.0
Свободный перевод вопроса Oracle SQL format mask to_number от участника @jeiv
Ответы (1 шт):
Автор решения: 0xdb
→ Ссылка
Маска формата это символьное значение, которое может быть составлено по условию:
select str,
to_number(str, 'fm999.99'||case substr (str, -1) when '-' then 'mi' end) res
from (
select '-92.93' str from dual
union all
select '92.93-' str1 from dual)
/
Результат:
STR RES
------ ----------
-92.93 -92,93
92.93- -92,93