我的表里有个字段 叫 “TXX"  是用来装系统时间的,比如我的TXX字段里面有很多时间,2009-9-10,2009-9-18,2009-5-2,2009-10-30,我用了这个语句排序
SELECT* FROM XXXX  ORDER BY TXX DESC
排出来的结果
2009-9-18
2009-9-10
2009-5-2
2009-10-30
  问题就是我明明是2009-10-30应该在最前面。怎么变成最后面了难道SQL不按时间来拍按数字的吗。怎么办。。有没有正确的方法

解决方案 »

  1.   

    你的日期字段不是datetime类型而是varchar对吗?
    SELECT * FROM XXXX  ORDER BY convert(datetime,TXX) DESC 
    试试看
      

  2.   

    你的TXX字段不是时间类型的吧  应该是varchar类型的
    varchar类型的排序是根据从左到右字符大小排的
      

  3.   

    5555555偶改了你方法没用。然后偶吧SQL 的VCHAR设置成了DATETIME.然后排序排出来了。但是变成了2009-10-30 00:00:00好烦啊。怎么去掉后面的00
      

  4.   

    00:00:00在数据库中是肯定存在的,你可以在程序中输出日期时调用DateTime.Parse("2009-10-30 00:00:00").ToLongDateString();
      

  5.   

    convert(varchar(10),时间字段,120)
    就可以把时间字段查出来的结果,只显示日期,不显示后面的时间
      

  6.   

    在c#里写,应该是ToShortDateString()吧
      

  7.   

    偶是。。DATELIST呀。。怎么改变嘛
      

  8.   

    要是时间格式的字符串 排序才有用 CONVERT(varchar(100), "", 23)格式化
      

  9.   

     这个 前台可以实现,后台也可以.
    sql convert(varchar(10),字段,120)
    前台页面绑定可以 
    <%# DataBinder.Eval(Container.DataItem,字段名."{0:yyyy-MM-dd}")%>
      

  10.   

    select convert(varchar(10),TXX,120) from table
      

  11.   

    如果你是在cs代码页面绑定这个时间格式.
     可以
    Convert.DataTime(获取的时间).ToString("yyyy-MM-dd");
      

  12.   

    不能写到前面? 你代码整出来看看. 前台绑定  跟 后台sql提取代码
      

  13.   

    完整代码
    public DataTable Gettop(string trLevel)//
    {
    try
    {
    return this.ExecuteDataSet("SELECT TOP 4 *  FROM ClientUpLoad WHERE UpArea = '"+trLevel+"' ORDER BY UserUpDate DESC","ClientUpLoad").Tables[0];
    }
    catch
    {
    return null;
    }
    }
    #endregion
      

  14.   

    SELECT TOP 4 *  FROM ClientUpLoad WHERE UpArea = '"+trLevel+"' ORDER BY UserUpDate DESC
    *号换成 你的字段名称
    SELECT TOP 4 字段1,字段2,字段3,convert(Varchar(10),UserUpDate ,120) as UserUpDate  FROM ClientUpLoad WHERE UpArea = '"+trLevel+"' ORDER BY UserUpDate DESC
      

  15.   

    order by CONVERT(varchar(10), TXX, 23) desc