如何使用SQL查询实现以下排序顺序?
Title_a
Title_b
Title_c
Title_d
Title_1a
Title_1b
Title_1c
Title_1d
Title_11a
Title_11b
Title_11c
Title_111a
Title_111b
Title_111c
Title_111d
Title_1111a
Title_1112a
Title_1112b
Title_12a
Title_12b
Title_12c
Title_1311a
Title_1311b
Title_1311c
Title_1311d
我尝试过String sort =“ CAST ("+ "title" + " AS INTEGER)
”;
但结果并不令人满意
答案 0 :(得分:1)
在我的评论“ Title_1311b”上,将值1311添加到ASCII值“ b”中。
Declare @col varchar(15) = 'Title_1311b'
SELECT SUBSTRING(@col, PATINDEX('%[0-9]%', @col), PATINDEX('%[0-9][^0-9]%', @col) - PATINDEX('%[0-9]%', @col) + 1) + ascii(right(@col,1))+1
您可以将其添加到您的sql查询中,看看会发生什么吗?
ORDER BY SUBSTRING(@col, PATINDEX('%[0-9]%', @col), PATINDEX('%[0-9][^0-9]%', @col) - PATINDEX('%[0-9]%', @col) + 1) + ascii(right(@col,1))+1
答案 1 :(得分:1)
对于那些字符串,如果不是最后一个字符,它将很好地排序。
因此,对于这些字符串,您可以按最后一个字符之前的顺序进行排序,然后按最后一个字符进行排序。
select *
from yourtable
order by substr(title,1,length(title)-1), substr(title,length(title),1)