Apakah mungkin untuk mengubah teks menjadi angka dalam kueri MySQL? Saya memiliki kolom dengan pengenal yang terdiri dari nama dan nomor dalam format "nama-nomor". Kolom memiliki tipe VARCHAR. Saya ingin mengurutkan baris sesuai nomor (baris dengan nama yang sama) tetapi kolom diurutkan sesuai urutan karakter, yaitu
name-1
name-11
name-12
name-2
Jika saya memotong nomornya, dapatkah saya mengubah nomor 'varchar' menjadi nomor 'asli' dan menggunakannya untuk mengurutkan baris? Saya ingin mendapatkan pesanan berikut.
name-1
name-2
name-11
name-12
Saya tidak dapat merepresentasikan nomor tersebut sebagai kolom terpisah.
diedit 2011-05-11 9:32
Saya telah menemukan solusi berikut ... ORDER BY column * 1
. Jika nama tidak akan mengandung angka, apakah aman untuk menggunakan solusi itu?
name
bisa berupa urutan huruf apa saja.Jawaban:
Ini harus bekerja:
SELECT field,CONVERT(SUBSTRING_INDEX(field,'-',-1),UNSIGNED INTEGER) AS num FROM table ORDER BY num;
sumber
Anda dapat menggunakan
SUBSTRING
danCONVERT
:SELECT stuff FROM table WHERE conditions ORDER BY CONVERT(SUBSTRING(name_column, 6), SIGNED INTEGER);
Di mana
name_column
kolom dengan nilai "nama-". TheSUBSTRING
menghapus segala sesuatu sebelum karakter keenam (yaitu "nama-" prefix) dan kemudianCONVERT
bertobat kiri ke integer nyata.PEMBARUAN : Mengingat keadaan yang berubah di komentar (yaitu awalan bisa apa saja), Anda harus memasukkan a
LOCATE
dalam campuran:Ini tentu saja mengasumsikan bahwa awalan non-numerik tidak memiliki tanda hubung di dalamnya tetapi komentar yang relevan mengatakan bahwa:
jadi itu harus menjadi asumsi yang aman.
sumber
SUBSTRING(name_column, 6)
. Aku tahu, kamu mempostingnya ketika dia tidak memberi tahu kami ini ...Cukup gunakan CAST,
Jenis hasil cor dapat menjadi salah satu dari nilai berikut:
sumber
Anda dapat menggunakan CAST () untuk mengubah dari string menjadi int. misalnya
SELECT CAST('123' AS INTEGER);
sumber
SELECT CAST('123' AS SIGNED INTEGER);
atauSELECT CAST('123' AS UNSIGNED INTEGER);
membuatnya berfungsi.SELECT *, CAST(SUBSTRING_INDEX(field, '-', -1) AS UNSIGNED) as num FROM tableName ORDER BY num;
sumber
satu cara sederhana PILIH '123' + 0
sumber
Untuk mendapatkan nomor coba dengan
SUBSTRING_INDEX(field, '-', 1)
kemudian konversikan.sumber
jika kunci utama Anda adalah string dalam format seperti
ABC / EFG / EE / 13/123 (nomor urut)
string semacam ini dapat dengan mudah digunakan untuk mengurutkan dengan pemisah ("/")
kita dapat menggunakan query berikut untuk memesan tabel dengan jenis kunci ini
SELECT * FROM `TABLE_NAME` ORDER BY CONVERT(REVERSE(SUBSTRING(REVERSE(`key_column_name`), 1, LOCATE('/', REVERSE(`key_column_name`)) - 1)) , UNSIGNED INTEGER) DESC
sumber
sumber
Cara umum untuk melakukannya:
SELECT * FROM your_table ORDER BY LENTH(your_column) ASC, your_column ASC
sumber