【问题标题】:Modulo arithmetic on dates in SQLSQL中日期的模运算
【发布时间】:2010-10-14 23:47:08
【问题描述】:

我有一个系统,它定义了天的重复模式。每个模式都有一个基准日期(通常是几年前,即创建该模式的时间)和一个天数(循环),因此例如它可能定义一个为期 7 天的模式:

表格:模式

ID | BaseDate   | DayCount
-----------------------------
1  | 01/02/2005 | 7

表格:PatternDetail

PID  | Offset | Detail
----------------------
1    | 0      | A
1    | 1      | B
1    | 2      | B
1    | 3      | C
  etc.

(详细信息列是特定于域的,不相关。)

我想要做的是,给定一个日期(比如今天),在 PatternDetail 表中为给定的工作模式计算出正确的偏移量。在伪代码中我会这样做:

offset = ((today.InDays) - (Pattern.BaseDate.InDays)) % (Pattern.DayCount)

如何在 SQL 中执行此操作(需要在 MSSQL Server 和 Oracle 中工作)?换句话说,我如何计算两个日期之间的天数并取这个差的模数?

【问题讨论】:

    标签: sql sql-server oracle date


    【解决方案1】:

    我不知道 PL/SQL 中有什么可用的,但 T-SQL 有一个 DATEDIFF 函数,这似乎是您正在寻找的:

    @Offset = ((DATEDIFF(day, @BaseDate, GETDATE()) % @DayCount)
    

    【讨论】:

      【解决方案2】:

      使用 DATEDIFF 获得不同的天数。这给出了一个整数。 然后使用 %(标准 SQL 模运算符)。

      就这么简单吗?

      【讨论】:

      • 就是这样。谢谢 :) 我对 SQL 语法很不熟悉
      • 作为参考,我使用了 DATEDIFF(day, BaseDate, GETDATE()) % DayCount
      猜你喜欢
      • 2023-01-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-14
      • 1970-01-01
      相关资源
      最近更新 更多