select convert(datetime,cdate) as ddate from tablename order by 1

解决方案 »

  1.   

    试一试用下面的order子句:
    order by convert(datetime,replace(replace(replace(日期,N'年','/'),N'月','/'),N'日',''))不过说实在的,日期使用varchar类型是在属于设计上的错误。不仅排序,计算起来麻烦,增加不必要的代码。而且还要增加代码验证用户输入的有效性,如果用户输入一个“2005年2月31日”那不就糗了。
      

  2.   

    我很不明白为什么日期会varchar难道前台日期是用户手输入的吗?这是何必呢 SQL Server 啊 努力 奋斗-----------------------------------------------------
      

  3.   

    谢谢朋友们,ycyin(齐格红茶) 帮我解决的这个问题!
    你们说的日期输入没事,表里存的是20050101这个字符串,
    我查询的是建的临时表里的日期!
      

  4.   

    create table t(date varchar(1000))
    insert t
    select '2005年10月10日' union all
    select '2005年1月1日' union all
    select '2005年1月2日' union all
    select '2005年1月3日'
    go
    ---创建函数
    create function f1(@col varchar(1000))
    returns varchar(1000)
    as
    begin
    declare @str varchar(1000)
    declare @y varchar(1000)
    declare @m varchar(1000)
    declare @d varchar(1000)
    set @str=''
    set @y=left(@col,4)
    set @m=left(stuff(@col,1,5,''),charindex('月',stuff(@col,1,5,''))-1)
    set @d=left(stuff(stuff(@col,1,5,''),1,charindex('月',stuff(@col,1,5,'')),''),charindex('日',stuff(stuff(@col,1,5,''),1,charindex('月',stuff(@col,1,5,'')),''))-1)
    select @str=@str+@y+@m+@d
    return @str
    end
    go
    select date from t order by convert(int,dbo.f1(date))
    --删除测试
    drop table t
    drop function f1
    ---结果
    /*
    date
    -----
    2005年1月1日
    2005年1月2日
    2005年1月3日
    2005年10月10日
    */
      

  5.   

    order by cast(replace(replace(replace('2005年1月1日','年','/'),'月','/'),'日','') as smalldatetime)日期最好是存为日期类型或整型,