将varchar转换为float而不会丢失数据

时间:2015-07-16 15:44:48

标签: mysql sql sql-server mariadb

我的varchar类型表中有纬度和纵向值列表。我希望他们是float。如何将varchar转换为float

例如:
36.26056695类型的varchar应转换为36.26056695类型的float

类型-99.11080846

varchar应转换为-99.11080846类型的float

2 个答案:

答案 0 :(得分:2)

使用投放运算符

例如

选择 CAST (' 36.26056695' AS 浮动)FROM

答案 1 :(得分:1)

这取决于“丢失数据”的含义。

如果你的意思是没有精确度,“浮动”将是不可靠的;它只能可靠地存储2的幂的倍数(.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) 可能 ,但这可以让您检查转换后的值(在UPDATE之后)你放下原来的那些。