Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 在desc oder中使用字母数字数据对列进行排序_Sql_Sorting_Sql Server 2008 R2 - Fatal编程技术网

Sql 在desc oder中使用字母数字数据对列进行排序

Sql 在desc oder中使用字母数字数据对列进行排序,sql,sorting,sql-server-2008-r2,Sql,Sorting,Sql Server 2008 R2,我需要使用SQL查询按降序对列进行排序 我用了正常的方法 Select * from StaffDetail order by SerialNo desc 但无法得到预期的结果,下面给出了用于排序的样本数据 样本数据 预期结果 只需使用LEFT、RIGHT、CHARINDEX字符串函数的组合,将字符串一分为二即可。然后根据这两个值进行排序 查询 select t.[Id], t.[SerialNo] from( select [Id], [SerialNo], left(

我需要使用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 len(t.[new_col1]) desc, t.[new_col1] desc, 
         len(t.[new_col2]) desc, t.[new_col2] desc;

您正在使用哪些数据库管理系统?博士后?甲骨文?数字是按字母顺序排列的。您使用的是哪种数据库管理系统?有些产品具有数字敏感排序规则。您能否将
BRB2017-6
添加到示例数据和预期结果中?我使用的是SQL Server 2008 R2,而此代码片段可以解决此问题,确实有助于提高您文章的质量。请记住,您将在将来回答读者的问题,这些人可能不知道您代码建议的原因。兄弟,您误解了我的问题“ASR2016-1”是一个单一值。我添加了一个表结构的图像。@ArunD:更新了答案
Select * from tableName order by columnName1 desc,SUBSTRING(columnName2,1)*1 desc