Si hallas algún problema con tu código o proyecto, recuerda probar siempre en un entorno de testing antes aplicar el código al proyecto final.
Solución:
Resulta que solo me faltaba DECIMAL
sobre el CAST()
descripción:
DECIMAL[(M[,D])]
Convierte un valor al 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));
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)
Esto se convertirá en un valor numérico sin necesidad de convertir o especificar longitud o dígitos:
STRING_COL+0.0
Si su columna es una INT
puede dejar de lado el .0
para evitar decimales:
STRING_COL+0
Al final de la página puedes encontrar las interpretaciones de otros usuarios, tú además tienes el poder dejar el tuyo si lo crees conveniente.