如何正确排序用户名?
例如我做这个查询:
SELECT * FROM `members` WHERE username LIKE 'bx%' ORDER BY username ASC
结果:
bx1
bx10
bx11
bx12
bx13
bx14
bx15
bx16
bx17
bx18
bx19
bx2
bx20
bx21
bx3
bx4
bx5
我想这样返回:
bx1
bx2
bx3
bx4
bx5
...
bx15
bx16
等等
SELECT *
FROM `members`
WHERE username LIKE 'bx%'
ORDER BY LENGTH(username), username
你需要这样做的事实告诉我你的模式是非规范化的。如果可能,如果需要对其进行操作,请将用户名的整数部分存储在单独的列中。
您需要创建一个用户定义的函数,该函数接受字符串并返回扩展字符串。假设是:字符串仅包含一个位于末尾的数字组件,并且小于由 fn 中的填充确定的最大整数大小 例如 ABC1234 -> ABC00001234 ABC34 -> ABC00000034 实施以下步骤
按输出排序您还可以添加一个计算字段(它使用刚刚创建的函数),它将返回该值并在其上创建一个索引。
SELECT * FROM `members`
WHERE username LIKE 'bx%'
ORDER BY cast(substring(username, 3) as unsigned) ASC
如果短语 bx 是固定的,
SELECT * FROM `members` WHERE username LIKE 'bx%'
ORDER BY replace(username,'BX','')*1 ASC