SQL 字符串排序问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL 字符串排序问题相关的知识,希望对你有一定的参考价值。

4000-1,4000-10,4000-11,4000-2,40000-4,D-1335-1,D-2750,D-3085,D-3102,D-3127,D3153-1,D-3315-3,M-3153-1,M-3153-2,M-3171,M-3202-1,M-3301-3,M-3315-3
转换成数字来排序,如果数据中有字母或者- 则去掉。
排成:
D-1335-1,D-2750,D-3085,D-3102,D-3127,D3153-1,M-3153-1,M-3153-2,M-3171,M-3202-1,M-3301-3,D-3315-3,M-3315-3,4000-1,4000-2,4000-10,4000-11,40000-4

参考技术A 如果你是直接使用sql语句来达到你想要的结果,这个非常麻烦了。
如果你是在代码中来处理,那就简单,比如放到C++中来处理,
那就是对字符串的处理了,有强大的string类,如果用MFC,那就有更强大的CString类。
比如去掉字母和特殊符号都很快速,也能方便转为数字,然后来排序。
参考技术B 要创建一个自定义函数,语句:
create function [dbo].[F_GetChar] ( @No varchar(100) )
RETURNS varchar(100)
AS
BEGIN
WHILE PATINDEX('%[^A-Za-z]%',@No)>0
BEGIN SET @No=STUFF(@No,PATINDEX('%[^A-Za-z]%',@No),1,'') --删掉一个非数字的字符,循环结束,剩余的为数字部分
END
RETURN CONVERT(varchar(100),@No)
END
使用语句:select * from 表名 order by dbo.F_GetChar(列名)本回答被提问者和网友采纳
参考技术C select s from Strsorder by Convert(int,left(s,charindex('.',s+'.')-1)) asc, s asc 参考技术D 假设数据在表t_table 里字段为 t_s
select * from t_table t orer by substr(t.t_s,3)

以上是关于SQL 字符串排序问题的主要内容,如果未能解决你的问题,请参考以下文章

SQL 字符串按大小排序

sql排序,id本身为字符串,怎样转换为数字后排序

sql排序,id本身为字符串,怎样转换为数字后排序

如何在 CLR 函数中获取 SQL 字符串的排序规则?

SQL2000里面字符串排序

如何在 SQL Server 中连接字符串,并按不同的列排序/排序?