【问题标题】:SQL Server sort by time plus one hourSQL Server 按时间加一小时排序
【发布时间】:2011-04-28 12:11:31
【问题描述】:

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

有没有办法对我的事件进行排序,以便结果从晚上 11:00、晚上 11:01、...、晚上 11:59 事件开始,然后继续上午 12:00 事件?如果可以在 SQL 和 LINQ to SQL 中提供示例,那就太好了。

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

【问题讨论】:

  • 当您查询时,您是否只需要给定“日期”的数据?
  • 是的。事件每天都在重复,因此只有一天是真正的。
  • 一点小知识:11PM是中国古代计时的午夜开始(实际上11PM - 第二天凌晨1点是第一个“小时”)。每个古代中国“时”映射到2个西方“时”。想知道你是否在做中国古代计时的事情吗?
  • 不。这个项目的日子从晚上 11 点开始。

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


【解决方案1】:

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

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

【讨论】:

  • 事件每天重复,因此数据库中只有一天的事件。
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-12-15
    • 1970-01-01
    • 2018-03-02
    • 2012-10-18
    • 1970-01-01
    • 1970-01-01
    • 2012-09-09
    • 1970-01-01
    相关资源
    最近更新 更多