Stronę najlepiej oglądać w rozdzielczości ekranu 1280x1024. Przy mniejszych rozdzielczościach skalowanie zdjęć z galerii powoduje znaczne zmniejszenie ich jakości. |
Gościmy
Naszą witrynę przegląda teraz 18 gości| Jak w MySQL posortować dane po polu char lub varchar jak liczby? |
| Baza danych MySQL | |
| poniedziałek, 17 stycznia 2011 11:49 | |
|
Przypuśćmy, że w polu tekstowym znajdują się wpisy :
3.39 2.93 8.32 43.20 5.40 21.39
Po posortowaniu otrzymamy wyniki :
2.93 21.39 3.39 43.20 5.40 8.32
Dzieje się tak dlatego, że baza danych nie dokonuje automatycznej konwersji danych i sortuje je tak jakby były danymi tekstowymi a nie liczbowymi. Aby uzyskać prawidłowe wyniki, należy dokonać konwersji tych danych z typu tekstowego do typu liczbowego. Do konwersji danych służy funkcja CAST(), natomiast typ danych jako liczba zmiennoprzecinkowa określa DECIMAL(). Ustalmy więc, że nasze liczby nie będą większe niż 10 znakowe z dwoma miejscami po przecinku, i znajdują się w polu „liczba” w tabeli „test”. Sortowania więc możemy dokonać następująco :
Jeżeli chcielibyśmy wyświetlić liczby po konwersji, możemy wykonać następującej operacji :
A co jeżeli liczby zmiennoprzecinkowe w naszej bazie zapisane są nie z kropką, ale z przecinkiem? Takie sortowanie też nie będzie prawidłowe, gdyż zostaną obcięte wszystkie cyfry po przecinku.
Wynik sortowania powyższych danych będzie następujący : 2.00 3.00 5.00 8.00 21.00 43.00
Aby dokonać prawidłowego sortowania, należy przed konwersją zamienić przecinki na kropki funkcją REPLACE(). Wykonujemy więc następujące zapytanie :
Teraz dane będą posortowane prawidłowo (zarówno z kropką jak i z przecinkiem) : Pole liczba : 2,93, Pole cena : 2.93 itd.
|
Jeżeli w naszej bazie danych zapisywaliśmy liczby w polu typu char lub varchar, to sortowanie po tym polu nie będzie dawało prawidłowych wyników. Dzieje się tak czasami, jeżeli np. do przechowywania cen w sklepie internetowym wykorzystaliśmy pole tekstowe. Baza danych posortuje tą tabelę tak jakby zapisane dane nie były liczbami, ale znakami.