SQL Server按时间加一小时排序

时间:2011-04-28 03:27:17

标签: sql sql-server linq linq-to-sql

我有一个事件数据库,每个事件都有一个Time字段,需要从上述时间按升序排序。这些活动的“日期”从晚上11:00开始(活动从晚上11:00到晚上10:59每天24小时进行。)

有没有办法对事件进行排序,以便结果从晚上11点,晚上11点01分,......,晚上11:59事件开始,然后再继续12:00 AM事件?如果可以在SQL和LINQ to SQL中提供可能很好的示例。

编辑:我应该解释一下我的问题的标题。我最初的想法是在排序时每次添加一小时,但仍然返回值为原始时间。这将导致所有11:00 PM等事件现在是凌晨12点等事件,其他一切都将在一小时前推进(当天晚上10:59的最后一天事件现在将在晚上11:59发生以进行分类)。这可能吗?

2 个答案:

答案 0 :(得分:1)

对于给定的一组时间,按升序排序将产生与按升序排序(时间+ 1小时)相同的结果。当向每个值添加常量值时(在此和其他简单情况下,至少),值集合的顺序不会改变。

您是否还需要对日期组件进行分组,还是按日期获取?我觉得也许你的问题是如何分组或选择(时间+ 1小时),而不是排序。

答案 1 :(得分:0)

不确定这是否是最有效的方法,但我认为这是你要求的。

declare @theDateYouAreInterestedIn smalldatetime
-- this gets today's date and subtracts an hour giving you 11:00pm yesterday
-- if you want it some other date just sub out the Cast(GetDate() as date) for the
-- desired date
set @theDateYouAreInterestedIn = Dateadd(hour, -1,Cast(Cast(GetDate() as date) as smalldatetime))
select *
from yourTable
where yourDateTimeField > @theDateYouAreInterestedIn 
and yourDateTimeField < Dateadd(day, 1,@theDateYouAreInterestedIn)
order by yourDateTimeField