Oracle - приведите Varchar к Float и укажите точность - PullRequest
3 голосов
/ 23 мая 2011

Мне нужно бросить варчар на поплавок. (Varchar гарантированно будет числом)

Я пытаюсь создать материализованное представление поверх готовой таблицы. Из-за этого все типы данных должны точно соответствовать ... включая точность и размер типов данных. Исходный столбец (до того, как был добавлен NVL) извлекал данные из типа FLOAT с точностью до 126. Когда я пытаюсь привести varchar к значению с плавающей точкой 126, кажется, что он не включает точность данных 126.

(Я проверил тот факт, что он не включал размер данных 126, создав стандартное представление с приведенным ниже запросом, который отбрасывает с плавающей точкой (126). Через мою IDE Toad я мог видеть точность "ThisorThat" число с плавающей точкой было 38).

Я просто обновил свое материализованное представление с помощью выражения NVL, например, так ...

Select Cast(NVL(thisFloat, thatFloat) as Float(126)) as ThisorThat
....
From tables;

Я получаю сообщение об ошибке «Ora-12060: форма предварительно созданной таблицы не соответствует запросу определения», поскольку размеры отличаются от исходной таблицы, на которой я «собираюсь». Мне нужно как-то бросить varchar в float с явным размером 126. Есть идеи?

Версия: Oracle 10g

Edit: Вот ссылка , с которой я в основном сталкиваюсь.

1 Ответ

2 голосов
/ 24 мая 2011

Используйте

TO_BINARY_FLOAT(mynumberstring) 

или

TO_BINARY_DOUBLE(mynumberstring) 

То, что вы пытаетесь сделать, на самом деле не бросок, это преобразование.

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