2015-07-16 3 views
-2

У меня есть список широт и продольных значений в таблице типа varchar. Я хочу, чтобы они были float. Как мне преобразовать varchar в float?Преобразование varchar в поплавок без потери данных

Например:
36.26056695 типа varchar должны быть преобразованы 36.26056695 типа float.

-99.11080846 типа varchar должны быть преобразованы -99.11080846 типа float

+0

Посмотрите это для MySQL: https://dev.mysql.com/doc/refman/5.6/en/precision-math-decimal-characteristics.html – PaulF

+0

Просьба пояснить: пытаетесь ли вы «изменить» определения столбцов на 'float' или манипулировать ими в инструкции' select' без потери точности? – Stavr00

+0

Что это? MySQL/MariaDB? Или sql-сервер? –

ответ

2

Применение В ролях оператор

Для примера

ВЫБОРCAST ('36 0,26056695' ASпоплавок) FROM ТАБЛИЦА

+0

У меня есть список 10000 значений. Я хочу изменить весь столбец с помощью одной команды –

+0

ALTER TABLE tbl MODIFY COLUMN col FLOAT NOT NULL; –

+0

Чтобы использовать эту функцию броска, это увеличивает время запроса, любое другое решение –

1

Это зависит от того, что вы подразумеваете под «потерей данных».

Если вы имеете в виду без потери точности, «поплавок» будет ненадежным; он может только надежно хранить кратные мощности двух (.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) мощи работы, но это позволяет проверять преобразованные значения (после обновления), прежде чем упасть оригинальные.

+0

8 десятичных разрядов - это слишком много, чтобы отличить одну чешую от перхоти от другой. 6 мест достаточно точные, чтобы различать двух человек, обнятых в поцелуе (16 см/6 дюймов). –

+0

@RickJames Я просто собирался с данными, предоставленными вопросом. – Uueerdo

+0

ОК, тогда мои комментарии направлены на OP, а не на вас. –

Смежные вопросы