Это зависит от того, что вы подразумеваете под «потерей данных».
Если вы имеете в виду без потери точности, «поплавок» будет ненадежным; он может только надежно хранить кратные мощности двух (.125, .25, .375 и т. д.).
Если вы имеете в виду конвертировать поля без их удаления, то лучший выбор - это что-то вроде этого :
ALTER TABLE `the_table`
ADD COLUMN `dec_val` NOT NULL DECIMAL(11, 8)
;
UPDATE `the_table`
SET `dec_val` = CAST(`str_val` AS DECIMAL(11, 8))
;
ALTER TABLE `the_table`
DROP COLUMN `str_val`
;
-- The below is only needed if you wanted to do something like rename the
-- new column to the same name as the original. Otherwise, you could just
-- have created the new column with the desired name.
ALTER TABLE `the_table`
CHANGE COLUMN `dec_val` `desired_column_name` NOT NULL DECIMAL(11, 8)
;
Конечно, вы можете использовать FLOAT вместо DECIMAL, но таким образом сохраняются точные значения.
Примечание: Просто изменяя определение исходного столбца для DECIMAL (11, 8) мощи работы, но это позволяет проверять преобразованные значения (после обновления), прежде чем упасть оригинальные.
Посмотрите это для MySQL: https://dev.mysql.com/doc/refman/5.6/en/precision-math-decimal-characteristics.html – PaulF
Просьба пояснить: пытаетесь ли вы «изменить» определения столбцов на 'float' или манипулировать ими в инструкции' select' без потери точности? – Stavr00
Что это? MySQL/MariaDB? Или sql-сервер? –