将部分非数字文本转换为数字的 MySQL 查询
在 MySQL 中,可以从非数字文本中提取数字部分并将其转换为数字数据类型以实现正确排序。
考虑包含以下内容的列的情况以“名称-数字”格式组合名称和数字的标识符。使用默认字符顺序基于此列对行进行排序会导致不期望的顺序:
name-1 name-11 name-12 name-2
要解决此问题,您可以使用 SUBSTRING_INDEX() 函数从文本中提取数字部分:
SUBSTRING_INDEX(field,'-',-1)
该函数提取最后一次出现“-”字符之后的子字符串,有效隔离数字
接下来,您可以使用 CONVERT() 函数将提取的子字符串转换为无符号整数:
CONVERT(SUBSTRING_INDEX(field,'-',-1),UNSIGNED INTEGER) AS num
此步骤将字符串转换为数字数据类型,可以用于数值比较。
最后,您可以使用 ORDER BY 子句根据提取和转换的数值对行进行排序部分:
ORDER BY num
此查询应生成所需的排序顺序:
name-1 name-2 name-11 name-12
请注意,此方法假设标识符的非数字部分将不包含任何数字。如果不能保证这一点,您可能需要使用更复杂的字符串操作技术。
以上是当 ID 包含字母数字文本时,如何对 MySQL 行进行数字排序?的详细内容。更多信息请关注PHP中文网其他相关文章!