首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >排序用户名

排序用户名
EN

Stack Overflow用户
提问于 2012-07-23 12:53:14
回答 4查看 124关注 0票数 6

如何正确排序用户名?

例如,我执行以下查询:

代码语言:javascript
复制
SELECT * FROM  `members` WHERE username LIKE  'bx%' ORDER BY username ASC 

结果

代码语言:javascript
复制
bx1
bx10
bx11
bx12
bx13
bx14
bx15
bx16
bx17
bx18
bx19
bx2
bx20
bx21
bx3
bx4
bx5

我想这样回来:

代码语言:javascript
复制
bx1
bx2
bx3
bx4
bx5
...
bx15
bx16

诸若此类

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-07-23 12:54:27

代码语言:javascript
复制
SELECT *
FROM `members`
WHERE username LIKE 'bx%'
ORDER BY LENGTH(username), username

您需要这样做的事实告诉我,您的模式是非规范化的。如果可能,如果需要对用户名进行操作,请将用户名的整数部分存储在单独的列中。

SQL示例

票数 11
EN

Stack Overflow用户

发布于 2012-07-23 13:19:43

您需要创建一个用户定义函数,该函数接受字符串并返回一个展开字符串。假设:字符串只包含一个数字组件,它位于末尾,小于fn中填充的最大整数大小,如ABC1234 -> ABC00001234 ABC34 -> ABC00000034,执行以下步骤

  • 从最后一个字符开始,依次遍历传递的字符串字符(递减位置),直到找到第一个非数字字符为止。(C)
  • 获取数字部分(4)的长度。
  • 在字符串的数字部分中添加一个"0“字符的复数(这将确定处理的数字部分的最大大小),给出(例如) 00001234。
  • 前缀由字符串的非数字部分构成,给出ABC00001234
  • 输出

按输出排序,您还可以添加一个计算字段(它使用刚刚创建的函数),该字段将给出返回的值并在其上创建一个索引。

票数 1
EN

Stack Overflow用户

发布于 2012-07-23 12:55:04

代码语言:javascript
复制
SELECT * FROM  `members` 
WHERE username LIKE  'bx%' 
ORDER BY cast(substring(username, 3) as unsigned) ASC
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11612925

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档