none
TSQL order by(需求高手帮助) RRS feed

  • 问题

  • 一个存放日期的字段,格式是yyyy-MM-dd HH:mm:ss 例如:2012-06-10 18:20:30

    我需要用这个字段来做排序条件,但是只需要日期部分(2012-06-10),因为还有其他的排序条件,所以如果排序到秒的话,会打乱其他的条件。

    有没有什么办法,可以只用日期那一部分排序?(前提不新加字段情况下)
    2012年6月18日 7:41

答案

  • select * from [表名] order by CONVERT(varchar(10),[日期字段名称],102)

    这样可以吗?


    学无止境

    2012年6月18日 8:31
  • 在sql server 中, 存储顺序和显示(读取)顺序是两个不同的东东

    对于存储顺序而言,如果表上有聚焦索引,那么是按聚焦索引顺序存储的,如果没有聚焦索引,那么数据存储是无序的

    对于显示(读取)顺序,它于存储顺序是无关的,也就是说,你存储的数据是按顺序的,读取出来看到的可能是无序的,可能是另一种顺序,这个与你读取数据的 T-SQL查询有关

    而一般所说的顺序,就是显示(读取)顺序,这个是要保障按照某种顺序的话,就贪玩于查询的 ORDER BY 子句,这就是为什么大家的回答都是查询

    2012年6月23日 6:40

全部回复

  • 你可以把你要排序的日期字段透過convert轉成只含日期格式之後再做排序。

    declare @t table (c1 datetime)
    insert into @t 
    select getdate() union all
    select DATEADD(day,1,getdate())  union all
    select DATEADD(day,-1,getdate())  
    select CONVERT(char(10),c1,111)
    from @t
    order by CONVERT(char(10),c1,111)


    以上說明若有錯誤請指教,謝謝。
    http://www.dotblogs.com.tw/terrychuang/

    2012年6月18日 8:25
  • select * from [表名] order by CONVERT(varchar(10),[日期字段名称],102)

    这样可以吗?


    学无止境

    2012年6月18日 8:31
  • 这些只是查询,.不能解决我这问题啊
    2012年6月18日 8:35
  • 谢谢您抽时间 想我这个问题,不过这个也不能实现我这个


    时间  手术室  手术间  台次   
    6.7    1         1         1

    6.7    1         1         2

    6.7    1         1         3

    6.8     1        2         1

    6.8     2        1          1

    需要 修改   1号手术室  1号手术间    把  3台次  修改成   1   台次   ,原来1 台次  +1 变成 2   ,2+1 变成 3   。(显示的时候需要根据  时间 来排序 )
    我现在想把  手术室做独立的 单位 来显示  多个 DATA gridview 来排程 

     
    2012年6月18日 8:42
  • 3显示为1 1显示为2 2显示为3  折腾完了还原来还是一样呀?

    你给出测试数据,脚本,及想要的结果...

    2012年6月18日 9:13
    版主
  • 你好,

    如果是按时间排序的话,可以用row_number() 来进行排序。看看下面的代码:

    declare @table table(id int identity(1,1),dates datetime, room int, room_number int)
    insert into @table 
    select '2012-06-07 08:10',1,1 union all 
    select '2012-06-07 08:09',1,1 union all 
    select '2012-06-07 06:02',1,1 union all 
    select '2012-06-08 07:00',1,2 union all 
    select '2012-06-08 07:00',2,1 
    
    select id,CONVERT(date,dates),room,room_number
    ,ROW_NUMBER()OVER(PARTITION BY room,room_number ORDER BY dates) AS queues
    from @table 

    Thanks.


    Please remember to mark the replies as answers if they help and unmark them if they provide no help. This can be beneficial to other community members reading the thread.

    2012年6月20日 10:34
    版主
  • 这些只是查询,.不能解决我这问题啊

    什么意思?排序一定要在查询中加order by啊,表中的数据是没有顺序的。

    想不想时已是想,不如不想都不想。

    2012年6月23日 4:37
    版主
  • 在sql server 中, 存储顺序和显示(读取)顺序是两个不同的东东

    对于存储顺序而言,如果表上有聚焦索引,那么是按聚焦索引顺序存储的,如果没有聚焦索引,那么数据存储是无序的

    对于显示(读取)顺序,它于存储顺序是无关的,也就是说,你存储的数据是按顺序的,读取出来看到的可能是无序的,可能是另一种顺序,这个与你读取数据的 T-SQL查询有关

    而一般所说的顺序,就是显示(读取)顺序,这个是要保障按照某种顺序的话,就贪玩于查询的 ORDER BY 子句,这就是为什么大家的回答都是查询

    2012年6月23日 6:40
  • 关注中  

    给我写信: QQ我:点击这里给我发消息

    2012年6月24日 10:13