SQL排序问题

2010zx09401-304-201,2010ZX09401-304-104B,2010ZX09401-304-105C把这些数据按后三位数字排序应该怎么写select... 2010zx09401-304-201,2010ZX09401-304-104B,2010ZX09401-304-105C 把这些数据按后三位数字排序 应该怎么写 select语句呢? 展开
 我来答
hit_lubin
2011-05-18 · TA获得超过7889个赞
知道大有可为答主
回答量:1554
采纳率:100%
帮助的人:2021万
展开全部
前边SELECT照常写
SELECT ...
FROM ...
WHERE ...
ORDER BY cast(reverse(substring(reverse(column),charindex('-',reverse(column) - 3),3) as int)

cast(reverse(substring(reverse(column),charindex('-',reverse(column)) - 3,3)) as int)
这个一层一层看
reverse(column) 是把字符串转置,就是从后往前写,例如'123',通过这个函数后变成'321'
转置后,根据您的字符串,只需要找到第一个横线的位置,并截取横线之前的三位并转回来即可。(原来是找最后一个横线的位置取横线后三位)
charindex('-',reverse(column) ),这个是取得转置之后第一个横线的位置
charindex('-',reverse(column)) - 3,往前推三位的位置,因为开头可能是数字,也可能事字母,所以不能从第一位开始,而是使用横线的位置往前推三位。
substring(reverse(column),charindex('-',reverse(column)) - 3,3) 这个是截取横线之前三位,即三位数字,倒序。
reverse(substring(reverse(column),charindex('-',reverse(column)) - 3,3))
这个是把三位数字在倒回来
cast(reverse(substring(reverse(column),charindex('-',reverse(column)) - 3,3)) as int)
最后使用cast函数把倒回来的三位字符串数字转成数字类型

以上的语法是使用SQLSERVER数据库的语法写的。charindex, substring都是SQLSERVER的函数。
另外,还有,看您的字符串,都是最后一个横线后边紧跟着三位数字,如果是这样的规则,这个语句可以,如果规则不定,那么这个语句就不适用了。

看了您上面的补充,这个是最终的语法:
select *
from app_member
order by cast(reverse(substring(reverse(m_uid),charindex('-',reverse(m_uid)) - 3,3)) as int)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式