积极答复者
TSQL order by(需求高手帮助)

问题
答案
-
select * from [表名] order by CONVERT(varchar(10),[日期字段名称],102)
这样可以吗?
学无止境
- 已标记为答案 怡红公子Moderator 2012年6月25日 3:04
-
在sql server 中, 存储顺序和显示(读取)顺序是两个不同的东东
对于存储顺序而言,如果表上有聚焦索引,那么是按聚焦索引顺序存储的,如果没有聚焦索引,那么数据存储是无序的
对于显示(读取)顺序,它于存储顺序是无关的,也就是说,你存储的数据是按顺序的,读取出来看到的可能是无序的,可能是另一种顺序,这个与你读取数据的 T-SQL查询有关
而一般所说的顺序,就是显示(读取)顺序,这个是要保障按照某种顺序的话,就贪玩于查询的 ORDER BY 子句,这就是为什么大家的回答都是查询
- 已标记为答案 怡红公子Moderator 2012年6月25日 3:04
全部回复
-
你可以把你要排序的日期字段透過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/ -
select * from [表名] order by CONVERT(varchar(10),[日期字段名称],102)
这样可以吗?
学无止境
- 已标记为答案 怡红公子Moderator 2012年6月25日 3:04
-
你好,
如果是按时间排序的话,可以用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.
-
在sql server 中, 存储顺序和显示(读取)顺序是两个不同的东东
对于存储顺序而言,如果表上有聚焦索引,那么是按聚焦索引顺序存储的,如果没有聚焦索引,那么数据存储是无序的
对于显示(读取)顺序,它于存储顺序是无关的,也就是说,你存储的数据是按顺序的,读取出来看到的可能是无序的,可能是另一种顺序,这个与你读取数据的 T-SQL查询有关
而一般所说的顺序,就是显示(读取)顺序,这个是要保障按照某种顺序的话,就贪玩于查询的 ORDER BY 子句,这就是为什么大家的回答都是查询
- 已标记为答案 怡红公子Moderator 2012年6月25日 3:04