看你的示例,应该是由数字和字母两部分组成的字段,排序的时候是先按数字部分排序,然后按字母部分排序,对吧?解决方案一:把这个字段拆分为两个字段,一个保存数字部分,一个保存字符串部分,这样排序就简单了,而你要使用他们的组合时也只要简单的操作就可以完成。这是最好的解答!解决方案二:如果你认为解决方案一不能满足你的需要,也就是说,你不能修改你的数据结构,只能这样了,那么:
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 getint(@str varchar(8000))
    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(一个字段)
      

  2.   

    but if the first character has same
      

  3.   

    Microsoft VBScript 运行时错误 错误 '800a000d' 类型不匹配: 'FormatDateTime' /Expert/reply.asp,行117 
      

  4.   

    select * from table order by ....
      

  5.   

    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)+right(@str,len(@str)-@I-1)
    end
    go
    select * from 表 order by dbo.getint(一个字段)
      

  6.   

    我是这么实现的:
    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(一个字段),一个字段