Арифметика по модулю даты в SQL - PullRequest
2 голосов
/ 23 марта 2009

У меня есть система, которая определяет повторяющиеся шаблоны дней. Каждый шаблон имеет базовую дату (часто несколько лет в прошлом, когда шаблон был создан) и число дней (которое повторяется), поэтому, например, он может определить шаблон для семидневного периода:

Таблица: Шаблон

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 ]

3 голосов
/ 23 марта 2009

Я не знаю, что доступно в PL / SQL, но в T-SQL есть функция DATEDIFF, которая выглядит как то, что вы ищете:

@Offset = ((DATEDIFF(day, @BaseDate, GETDATE()) % @DayCount)
2 голосов
/ 23 марта 2009

Используйте DATEDIFF, чтобы получить различное количество дней. Это дает целое число. Затем используйте% (стандартный оператор SQL по модулю).

Это просто?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...