在 SQL 中对包含数字的字符串列进行排序
对包含数字的字符串列进行排序时,默认的 MySQL 排序算法将数字放在字母后面。这并不总是所需的行为。
问题:
按升序对包含数字的以下字符串列进行排序:
name |
---|
a 1 |
a 12 |
a 2 |
a 3 |
预期结果是:
name |
---|
a 1 |
a 2 |
a 3 |
a 12 |
SQL 解决方案:
假设列模式始终为“WORD space NUMBER”,则可以使用以下 SQL 查询:
<code class="sql">SELECT * FROM table ORDER BY CAST(SUBSTRING(column, LOCATE(' ', column) + 1) AS SIGNED);</code>
或者使用 SUBSTRING_INDEX:
<code class="sql">ORDER BY SUBSTRING_INDEX(column, " ", 1) ASC, CAST(SUBSTRING_INDEX(column, " ", -1) AS SIGNED);</code>
此查询使用 SUBSTRING_INDEX 分别提取字符串中的单词和数字部分,并相应地对它们进行排序。
解释:
此解决方案依赖于这样一个事实:字符串中空格字符后面的子字符串始终包含数字。通过将此子字符串转换为数值,我们可以对列进行数字排序,忽略字母前缀。
注意:
如果字符串列不跟在 " WORD space NUMBER”模式,可能需要额外的逻辑或字符串操作函数才能实现所需的排序结果。
以上是如何在 MySQL 中对包含数字的字符串列进行升序排序?的详细内容。更多信息请关注PHP中文网其他相关文章!