2011-09-09 12 views
27

Mam tabelę zawierającą wartości szerokości i długości geograficznej przechowywane jako ciągi znaków (VARCHAR), które chcę przekonwertować na FLOAT (10,6).Jak przekonwertować ciąg na float w mysql?

Jednak wydaje się, że nie ma prostego sposobu, aby to zrobić, używając CAST() lub CONVERT().

Jak mogę łatwo przekonwertować te kolumny? To jest jednorazowa konwersja.

Odpowiedz

46

Okazuje się, że po prostu brakuje DECIMAL opis CAST():

DECIMAL[(M[,D])]

Przekształca wartość na dziesiętny typ danych. Opcjonalne argumenty M i D określają precyzję (M określa całkowitą liczbę cyfr) i skalę (D określa liczbę cyfr po przecinku dziesiętnym) wartości dziesiętnej. Domyślna precyzja to dwie cyfry po przecinku dziesiętnym.

Zatem poniższa kwerenda pracował:

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

Nie umieszczać spacji między 'CAST' i'() 'jak ja. To doprowadzi cię do 'Error Code: 1064. Masz błąd w swojej składni SQL' – SBF