SQL排序问题
2010zx09401-304-201,2010ZX09401-304-104B,2010ZX09401-304-105C把这些数据按后三位数字排序应该怎么写select...
2010zx09401-304-201,2010ZX09401-304-104B,2010ZX09401-304-105C 把这些数据按后三位数字排序 应该怎么写 select语句呢?
展开
展开全部
前边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)
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)
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询