declare @StartDate varchar(10),@EndDate varchar(10)
set @StartDate='2008-01-12'
set @EndDate='2009-01-12'
select * from Table_Queue where queuetime 
between cast(@StartDate as datetime) and cast(@EndDate as DateTime) order by patientpk desc,queuetime asc 

解决方案 »

  1.   

    group by datepart(year,convert(varchar,queuetime,103)),datepart(month,convert(varchar,queuetime,103)),datepart(day,convert(varchar,queuetime,103))
      

  2.   


    select * from Table_Queue
    where queuetime>=StartDate
          and
          queuetime<cast(EndDate as Datetime)+1  
      

  3.   

    以上都不对 我想要的是
    select * from Table_Queue where queuetime between cast('" + StartDate + " 00:00:00' as datetime) and cast('" + EndDate + " 23:59:59' as DateTime)查询出数据后 然后按queuetime (时间格式的字符串)的年-月-日分组 并且分组后 每组信息都要满足 patientpk desc,queuetime asc 
      

  4.   

    select * from Table_Queue
    where queuetime between cast('" + StartDate + " 00:00:00' as datetime) and cast('" + EndDate + " 23:59:59' as DateTime)
    order by queuetime,patientpk desc,queuetime asc
    第一排序queuetime,相当于分组,queuetime一样时按patientpk desc,queuetime asc排序
    何必那么麻烦呢
      

  5.   

    哦对了,queuetime不可以直接用,用left(cast(queuetime as varchar(20)),0,10)替换就可以了。截取一下前十位后进行排序
      

  6.   

    queuetime(时间格式的字符串 如2009-7-5 10:44:53 或是2009-11-15 10:34:23
    left(cast(queuetime as varchar(20)),0,10)能找到吗?
      

  7.   

    我试了 不对 提示说queuetime多次排序 
      

  8.   


    select *,CONVERT(varchar(20), queuetime, 23) as queuetime1 from Table_Queue where queuetime between cast('" + StartDate + " 00:00:00' as datetime) and cast('" + EndDate + " 23:59:59' as DateTime) order by queuetime1 asc,patientpk desc,queuetime asc 
    *换成要查询的列名,使用CONVERT(varchar(100), queuetime, 23)是把日期格式化成如:2009-07-08的样式,这样,查询时,相当于多了一列格式化日期的列,避免使用group by带来的麻烦(有些列无法使用聚合函数),又可以实现按天排序