2011-09-09 13 views
27

Tengo una tabla que contiene los valores de latitud y longitud almacenados como cadenas (VARCHAR) que me gustaría convertir a FLOAT (10,6).¿Cómo puedo convertir una cadena en un flotante en mysql?

Sin embargo, no parece haber una manera directa de hacerlo usando CAST() o CONVERT().

¿Cómo puedo convertir estas columnas fácilmente? Esta es una conversión de una sola vez.

Respuesta

46

Resulta que yo estaba perdiendo DECIMAL en la descripción CAST():

DECIMAL[(M[,D])]

convierte un valor de tipo de datos decimal. Los argumentos opcionales M y D especifican la precisión (M especifica el número total de dígitos) y la escala (D especifica el número de dígitos después del punto decimal) del valor decimal. La precisión predeterminada es de dos dígitos después del punto decimal.

Por lo tanto, la siguiente consulta funcionó:

UPDATE table SET 
latitude = CAST(old_latitude AS DECIMAL(10,6)), 
longitude = CAST(old_longitude AS DECIMAL(10,6)); 
4
mysql> SELECT CAST(4 AS DECIMAL(4,3)); 
+-------------------------+ 
| CAST(4 AS DECIMAL(4,3)) | 
+-------------------------+ 
|     4.000 | 
+-------------------------+ 
1 row in set (0.00 sec) 

mysql> SELECT CAST('4.5s' AS DECIMAL(4,3)); 
+------------------------------+ 
| CAST('4.5s' AS DECIMAL(4,3)) | 
+------------------------------+ 
|      4.500 | 
+------------------------------+ 
1 row in set (0.00 sec) 

mysql> SELECT CAST('a4.5s' AS DECIMAL(4,3)); 
+-------------------------------+ 
| CAST('a4.5s' AS DECIMAL(4,3)) | 
+-------------------------------+ 
|       0.000 | 
+-------------------------------+ 
1 row in set, 1 warning (0.00 sec) 
+2

No ponga un espacio entre las '' CAST' y() 'como lo hice. Te llevará a 'Código de error: 1064. Tienes un error en tu sintaxis de SQL' – SBF

Cuestiones relacionadas