Mengisih Lajur Rentetan yang Mengandungi Nombor dalam SQL
Apabila cuba mengisih lajur rentetan yang mengandungi nilai berangka menggunakan susunan lalai dalam SQL, keadaan semula jadi algoritma pengisihan mungkin tidak menghasilkan hasil yang diingini. Khususnya, nombor dengan sifar pendahuluan boleh diletakkan sewenang-wenangnya berbanding dengan nilai berangkanya.
Untuk menangani isu ini, pertimbangkan pertanyaan SQL berikut:
<code class="sql">SELECT * FROM table ORDER BY CAST(SUBSTRING(column,LOCATE(' ',column)+1) AS SIGNED)</code>
Pertanyaan ini menganggap bahawa data lajur mengikuti corak "STRING SPACE NUMBER" dan menggunakan fungsi SUBSTRING untuk mengekstrak bahagian nombor setiap rentetan. Dengan menghantar nilai yang diekstrak kepada integer yang ditandatangani, pertanyaan boleh mengisih hasil berdasarkan nilai berangka dan bukannya perwakilan rentetan.
Berikut ialah contoh untuk menunjukkan kefungsian:
<code class="sql">INSERT INTO t (st) VALUES ('a 1'),('a 12'),('a 6'),('a 11'); SELECT * FROM t ORDER BY st; +----+------+ | id | st | +----+------+ | 1 | a 1 | | 4 | a 11 | | 2 | a 12 | | 3 | a 6 | +----+------+ SELECT * FROM t ORDER BY CAST(SUBSTRING(st,LOCATE(' ',st)+1) AS SIGNED); +----+------+ | id | st | +----+------+ | 1 | a 1 | | 3 | a 6 | | 4 | a 11 | | 2 | a 12 | +----+------+</code>
Pertanyaan ini mengisih baris dengan betul berdasarkan nilai berangka dalam rentetan. Jika data rentetan mengikut corak yang berbeza, pelarasan mungkin diperlukan untuk mengekstrak bahagian nombor dengan tepat.
Atas ialah kandungan terperinci Bagaimana Mengisih Lajur Rentetan yang Mengandungi Nombor dalam SQL: Menangani Sifar Utama dan Mencapai Susunan Berangka?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!