Ketika membuat sebuah database, pada masing2 tabel nya kita buat kolom yang memang sesuai dengan type datanya, hal ini penting karena saat melakukan order by, mysql secara default akan memperlakukan data sesuai type datanya.
Sebagai contoh anggaplah kita akan membuat database mahasiswa,
CREATE DATABASE `mahasiswa` ;
CREATE TABLE `data_mahasiswa` (
`nis` INT( 10 ) NOT NULL ,
`nama` VARCHAR( 100 ) NOT NULL ,
`umur` TINYINT NOT NULL ,
PRIMARY KEY ( `nim` )
) ENGINE = MYISAM ;
INSERT INTO `data_mahasiswa` ( `nim` , `nama` , `umur` )
VALUES
('02510010', 'Nama Siswa 1', '24'),
('02510012', 'Nama Siswa 2', '8'),
('02510013', 'Nama Siswa 3', '7'),
('02510015', 'Nama Siswa 4', '5'),
('02510018', 'Nama Siswa 5', '31'),
('02510019', 'Nama Siswa 6', '11'),
('02510011', 'Rudi Hermawan', '13')
;
Disini umur mempunyai type data TINYINT, mysql membacanya sebagai bilangan integer/bilangan bulat sehingga jika diurutkan dari kecil kebesar dengan order by ASC hasilnya benar
SELECT *
FROM `data_mahasiswa`
ORDER BY `data_mahasiswa`.`umur` ASC
Hasilnya : 5 7 8 11 13 24 31
atau dari umur terbesar ke umur terkecil dengan order by DESC
SELECT *
FROM `data_mahasiswa`
ORDER BY `data_mahasiswa`.`umur` DESC
Hasilnya : 31 24 13 11 8 7 5
Nah bagaimana jika kolom umur dijadikan varchar, perintah untuk menggantinya adalah
ALTER TABLE `data_mahasiswa` CHANGE `umur` `umur` VARCHAR( 4 ) NOT NULL
Jika di urutkan dari kecil ke besar (ASC)
hasilnya : 11 13 24 31 5 7 8
Jika di urutkan dari besar ke kecil (DESC)
hasilnya : 8 7 5 31 24 13 11
Kenapa bisa begitu, karena kolom umur oleh mysql dianggap sebagai string (varchar) sehingga angka 8 menjadi lebih besar dari 13, dan angka 11 akan dianggap lebih kecil dari 8.
Kesimpulannya adalah jika membuat suatu database harap perhatikan betul type datanya.
Kalau sudah terlanjur dan anda tidak ingin merubah tipe datanya, dan kita ingin merubah type string menjadi angka, caranya pakai Cast Functions and Operators di mysql.
Contoh :
SELECT *
FROM `data_mahasiswa`
ORDER BY CAST(`umur` AS SIGNED) ASC
Atau
SELECT *
FROM `data_mahasiswa`
ORDER BY CONVERT(`umur`, SIGNED) ASC
keterangannya adalah CAST(expr AS type), CONVERT(expr,type) dimana expr merupakan kondisi bilangan yang akan di convert, sedangkan type adalah convert tujuan yang terdiri dari:
BINARY[(N)]
CHAR[(N)]
DATE
DATETIME
DECIMAL
SIGNED [INTEGER]
TIME
UNSIGNED [INTEGER]
Semoga informasi ini berguna…





















Oktober 8th, 2008 at 11:43
kalau database sudah ada gimana ? apakah harus ngganti desain table juga. malah ribet, apalagi kalau sistem sudah berjalan lama dan database cukup besar. Resiko tinggi.
Ada cara cukup jitu untuk mengakali, yaitu dengan mengkonvert umur ke integer. sourcenya :
SELECT *
FROM `data_mahasiswa`
ORDER BY `data_mahasiswa`.`umur`,convert(`data_mahasiswa`.`umur`,signed) DESC
Mei 20th, 2009 at 09:34
mas mau tanya kalo di sql kenapa record dalam field type varchar jika ada tanda kutip tunggal pasti erorr
wasalam