看你的示例,应该是由数字和字母两部分组成的字段,排序的时候是先按数字部分排序,然后按字母部分排序,对吧?解决方案一:把这个字段拆分为两个字段,一个保存数字部分,一个保存字符串部分,这样排序就简单了,而你要使用他们的组合时也只要简单的操作就可以完成。这是最好的解答!解决方案二:如果你认为解决方案一不能满足你的需要,也就是说,你不能修改你的数据结构,只能这样了,那么:
1——
在数据库中创建一个函数,这个函数的功能用于返回你指定值的数字和字符串部分,比如:
Create Function GetDataPart (@FieldValue Varchar(100),@DataPartNo int)
(本函数的具体实现自己考虑,主要是把你排序字段数据的数字部分和字母部分区分,@DataPartNo取值为1或2,表示第一或第二部分)2——
使用如下的Select语句:
Select * From TableName Order By GetDataPart(SortFieldName,1),GetDataPart(SortFieldName,2)
1——
在数据库中创建一个函数,这个函数的功能用于返回你指定值的数字和字符串部分,比如:
Create Function GetDataPart (@FieldValue Varchar(100),@DataPartNo int)
(本函数的具体实现自己考虑,主要是把你排序字段数据的数字部分和字母部分区分,@DataPartNo取值为1或2,表示第一或第二部分)2——
使用如下的Select语句:
Select * From TableName Order By GetDataPart(SortFieldName,1),GetDataPart(SortFieldName,2)
returns int
as
begin
declare @a varchar(1000)
set @a=''
while isnumeric(left(@str,1))=1
begin
set @a=@a+left(@str,1)
set @str=left(@str,1)
end
return cast(@a as int)
end
go
select * from 表 order by dbo.getint(一个字段)
returns varchar(8000)
as
begin
declare @a varchar(1000),@i int
set @a=''
set @I=1
while isnumeric(left(@str,@I))=1 and @I<=len(@str)
begin
set @a=left(@str,@I)
set @i=@I+1
end
return right('0000000000'+left(@str,@I-1),10)+right(@str,len(@str)-@I-1)
end
go
select * from 表 order by dbo.getint(一个字段)
create function getint(@str varchar(8000))
returns varchar(8000)
as
begin
declare @a varchar(1000),@i int
set @a=''
set @I=1
while isnumeric(left(@str,@I))=1 and @I <=len(@str)
begin
set @a=left(@str,@I)
set @i=@I+1
end
return right('0000000000'+left(@str,@I-1),10)
end
go
select * from 表 order by dbo.getint(一个字段),一个字段