Используя Oracle SQL, как я могу преобразовать строку в число, если строка (столбец VARCHAR2) может содержать:
число в фиксированной записи, например как -11.496606820938826
SELECT TO_NUMBER('-11.496606820938826', '999.999999999999999999', 'NLS_NUMERIC_CHARACTERS=''. ''') FROM DUAL;
число в научной нотации c, такое как -4.0504035245989348E-3
SELECT TO_NUMBER('-4.0504035245989348E-3', '999.999999999999999999EEEE', 'NLS_NUMERIC_CHARACTERS=''. ''') FROM DUAL;
Пока Я использовал следующие модели формата :
- Фиксированная запись:
999.999999999999999999
- Scientifi c запись:
999.999999999999999999EEEE
но я не могу найти модель единого формата, которая работает в обоих случаях.
Пример данных:
STRING_VALUE
------------------------
-4.0504035245989348E-3
-11.496606820938826
------------------------
Я использую Oracle 12.1, поэтому я могу ' t * либо VALIDATE_CONVERSION , ни ON ОШИБКА КОНВЕРСИИ .
Редактировать
Кроме того, этот код будет работать на разных окружающая среда с различными настройками NLS; Я не могу предположить, что использование TO_NUMBER
без модели формата будет просто работать.