Mengisih Lajur Rentetan Yang Mengandungi Nombor dalam SQL
Apabila mengisih lajur rentetan yang mengandungi nombor, algoritma pengisihan MySQL lalai meletakkan nombor selepas huruf. Ini bukan selalunya tingkah laku yang diingini.
Masalah:
Isih lajur rentetan berikut yang mengandungi nombor dalam tertib menaik:
name |
---|
a 1 |
a 12 |
a 2 |
a 3 |
Yang dijangka hasilnya ialah:
name |
---|
a 1 |
a 2 |
a 3 |
a 12 |
Penyelesaian dengan SQL:
Dengan mengandaikan corak lajur sentiasa "WORD space NUMBER", pertanyaan SQL berikut boleh digunakan:
<code class="sql">SELECT * FROM table ORDER BY CAST(SUBSTRING(column, LOCATE(' ', column) + 1) AS SIGNED);</code>
Sebagai alternatif, dengan SUBSTRING_INDEX:
<code class="sql">ORDER BY SUBSTRING_INDEX(column, " ", 1) ASC, CAST(SUBSTRING_INDEX(column, " ", -1) AS SIGNED);</code>
Pertanyaan ini menggunakan SUBSTRING_INDEX untuk mengekstrak perkataan dan nombor bahagian rentetan secara berasingan dan mengisihnya dengan sewajarnya.
Penjelasan:
Penyelesaian ini bergantung pada fakta bahawa subrentetan selepas aksara ruang dalam rentetan sentiasa mengandungi nombor. Dengan menukar subrentetan ini kepada nilai berangka, kita boleh mengisih lajur secara berangka, mengabaikan awalan huruf.
Nota:
Jika lajur rentetan tidak mengikut " WORD space NUMBER" corak, logik tambahan atau fungsi manipulasi rentetan mungkin diperlukan untuk mencapai hasil pengisihan yang diingini.
Atas ialah kandungan terperinci Bagaimana untuk Mengisih Lajur Rentetan yang Mengandungi Nombor dalam Susunan Menaik dalam MySQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!