Firebird 2.1 TIMESTAMP арифметические и гражданские интервалы - PullRequest
3 голосов
/ 22 января 2010

Насколько я понимаю, в соответствии с Interbase v6 Firebird 2.5 не поддерживает ключевое слово SQL-92 INTERVAL. По крайней мере, так предлагается эта ссылка и мои повторные ошибки SQLCODE -104, пытающиеся заставить INTERVAL s работать под isql (1) .

в Firebird.

Как же тогда я могу объяснить нарушения в нашем гражданском учете времени - месяцы не всегда одинаковы, как и дни с экономией времени и скачками, не говоря уже о году путаницы и т. Д. - при выполнении TIMESTAMP арифметики в Firebird 2.1?

Как я могу легко определить «на месяц раньше» или «на неделю позже», чем данный TIMESTAMP? Как насчет «на один день позже» или «на два часа раньше»?

Ответы [ 5 ]

5 голосов
/ 23 января 2010

Вы можете использовать встроенные функции DateAdd () и DateDiff () .
В качестве альтернативы вы также можете использовать классическую арифметику дат .

1 голос
/ 19 января 2011

Есть приятный внешний UDF с именем rFunc: http://rfunc.sourceforge.net/,, он имеет приятные функции Date, такие как DaysBetween и IncDate (d, i1, i2, i3) и многие другие

1 голос
/ 23 января 2010

Вы также можете использовать функции внешнего UDF fbudf.dll

1 голос
/ 22 января 2010

Если это не реализовано в Firebird, возможно, вы могли бы сделать это с помощью технологии, называющей ваш sql-сервер, и получить полученную временную метку? Я знаю, что это довольно легко сделать на Java или .Net

0 голосов
/ 20 января 2011
  1. Вычтите один день из даты отметки времени в цикле, пока не изменился месяц.
  2. Вычтите один день из даты метки времени в цикле, пока день не изменится на Воскресенье.
...