排序与字母数字数据说明奥德
我需要梳理使用SQL查询 降序排序列一列我用正常的方法排序与字母数字数据说明奥德
Select * from StaffDetail order by SerialNo desc
,但不能能得到预期的结果,样本数据用于排序下面给出
示例数据
预期结果
使用的LEFT
,RIGHT
,CHARINDEX
字符串函数的组合只要分割字符串分为二。然后根据这两个值进行排序。
查询
select t.[Id], t.[SerialNo] from(
select [Id], [SerialNo],
left([SerialNo], charindex(' - ', [SerialNo], 1) - 1) [new_col1],
right([SerialNo], charindex(' - ', reverse([SerialNo]), 1) - 1) [new_col2]
from [your_table_name]
)t
order by len(t.[new_col1]) desc, t.new_col1 desc, cast(t.[new_col2] as int) desc;
您还可以更改order by
条款一样,
order by len(t.[new_col1]) desc, t.[new_col1] desc,
len(t.[new_col2]) desc, t.[new_col2] desc;
兄弟,你错误地理解了我的问题'ASR2016 - 1'是一个单一的值。我添加了表格结构的图像。 –
@ArunD:更新了答案 – Wanderer
“将字符串拆分为两个”作品。谢谢兄弟 –
Select * from tableName order by columnName1 desc,SUBSTRING(columnName2,1)*1 desc
虽然这段代码可以解决这个问题,但[包括解释](http://meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers)确实有助于提高您的质量帖子。请记住,您将来会为读者回答问题,而这些人可能不知道您的代码建议的原因。 – DimaSan
哪些DBMS您使用的? Postgres的?甲骨文? –
这些数字按字母顺序排列。你使用哪个dbms?一些产品具有数字敏感归类。 – jarlh
您能否在样品数据和预期结果上添加BRB2017-6? – jarlh