Mysql 排序用户名
如何正确排序用户名 例如,我执行以下查询:Mysql 排序用户名,mysql,sql,database,Mysql,Sql,Database,如何正确排序用户名 例如,我执行以下查询: 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 `member
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
您需要这样做的事实告诉我您的模式是非规范化的。如果可能,如果需要对用户名进行操作,请将用户名的整数部分存储在单独的列中
如果短语bx是固定的
SELECT * FROM `members` WHERE username LIKE 'bx%'
ORDER BY replace(username,'BX','')*1 ASC
您需要创建一个用户定义的函数,该函数接受字符串并返回扩展字符串。假设是:字符串只包含一个数值分量,该分量位于末尾,小于fn中填充所确定的最大整数大小 例如ABC1234->ABC00001234 ABC34->ABC00000034 执行以下步骤
- 从最后一个字符开始,遍历传递的字符串 一个字符接一个字符(位置递减),直到第一个非 找到数字字符。(C)
- 获取数字部分(4)的长度
- 将多个“0”字符添加到的数字部分 字符串(这决定了处理的数字部分的最大大小) 给出(例如)00001234
- 由字符串的非数字部分作为前缀 给出ABC00001234
- 输出
您还可以添加一个计算字段(使用刚刚创建的函数),该字段将给出返回的值并在其上创建索引。ooh,我喜欢这个答案+1但是如果还有一个用户名bxa1,会发生什么呢?它将在
bx1
和bx123
之间订购。。。也许不是OP想要的?@eggyal是的,你需要一个自定义函数来进行自然排序。@RedFilter使用大写看起来更好haha@NikolaK. 看起来像是在对我大喊大叫……好像那是一场军备竞赛战争,对答案没有多大帮助。谢谢!我已经有了一个成员id(PK)字段。。我只需要为报告页面订购bx*
用户名。。谢谢:)哇,我得到了选票。。。我想知道为什么?这是一个通用的问题,适用于广泛的观众,以一种清晰简洁的方式提出。
SELECT * FROM `members` WHERE username LIKE 'bx%'
ORDER BY replace(username,'BX','')*1 ASC