表t1,字段f1是nvarchar类型。
记录值为:
f1的值如下:
2007年8月7日
2007年8月27日
2007年6月9日
2007年6月29日如何使其真正按照日期的顺序排序,希望得到的结果如下:2007年8月27日
2007年8月7日
2007年6月29日
2007年6月9日sql语句怎么写才能搞定?

解决方案 »

  1.   

    可以搞定,但最彻底的方案是将字段改为datetime
      

  2.   

    select convert(datetime,replace(replace(replace('2007年8月7日','年','-'),'月','-'),'日',''))
      

  3.   

    order by cast(replace(replace(left(f1,len(f1)-1),'年','-'),'月','日') as datetime) desc
      

  4.   

    create table tb(f1 varchar(20))
    insert tb
    select '2007年8月7日'
    union select '2007年8月27日'
    union select '2007年6月9日'
    union select '2007年6月29日'
    select *
    from tb
    order by convert(datetime,replace(replace(replace(f1,'年','-'),'月','-'),'日',''))drop table tb
      

  5.   

    declare @t1 table(f1 nvarchar(20))
    insert into @t1 select '2007年8月7日'
    insert into @t1 select '2007年8月27日'
    insert into @t1 select '2007年6月9日'
    insert into @t1 select '2007年6月29日'select * from @t1 order by cast(replace(replace(left(f1,len(f1)-1),'年','-'),'月','-') as datetime) desc/*
    f1                   
    -------------------- 
    2007年8月27日
    2007年8月7日
    2007年6月29日
    2007年6月9日
    */
      

  6.   


    order by (replace(replace(f1,'年','-'),'月','-'),'日','')
      

  7.   

    --笔误
    order by cast(replace(replace(left(f1,len(f1)-1),'年','-'),'月','-') as datetime) desc
      

  8.   

    create table #t
    (f1 varchar(100))
    insert into #tselect '2007年8月7日' union all
    select '2007年8月27日' union all
    select '2007年6月9日' union all
    select '2007年6月29日'select  f1 from #t order by cast( replace(replace(replace(f1,'年','-'),'月','-'),'日','') as datetime) descf1                                                                                                   
    2007年8月27日
    2007年8月7日
    2007年6月29日
    2007年6月9日(4 row(s) affected)
      

  9.   

    - OR
    order by cast(replace(replace(replace(f1,'年','-'),'月','-'),'日','-') as datetime) desc