SQL中日期的模运算

时间:2009-03-23 14:45:52

标签: sql sql-server oracle date

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

表:模式

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中工作)?换句话说,我如何计算两个日期之间的天数并取这个差异的模数?

2 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:2)

使用DATEDIFF可以使日数不同。这给出了一个整数。 然后使用%(标准SQL模运算符)。

这很简单吗?