DB2 UDF, чтобы вернуть добавленную дату? - PullRequest
1 голос
/ 25 января 2011

Я пытаюсь создать DB2 UDF, которая принимает введенную дату и возвращает новую дату с добавлением нескольких месяцев. Синтаксис запроса для этого шага должен использовать

 select date + 12 months from sysibm.sysdummy1;

Внутри UDF я не могу заставить это работать

monthsToAdd INTEGER;
SET monthsToAdd=4;
set result= inputDate + monthsToAdd + MONTHS;
return result;

Там написано

Состояние SQL: 42816 Код поставщика: -182 Сообщение: [SQL0182] Неверное выражение даты, времени или отметки времени. Причина , , , , : Произошло одно из следующего: - Операнд добавления - это дата, а другой - не длительность даты. - Операнд сложения - это время, а другой - не длительность. - Операнд сложения является меткой времени, а другой - не длительностью. - Операндом вычитания является дата, а другим - не дата, символ или длительность даты. - Операнд вычитания - это время, а другой - не время, символ или длительность. - Операнд вычитания является меткой времени, а другой не является меткой времени, символом или продолжительностью. Восстановление , , : Исправьте арифметическое выражение, чтобы оно содержало правильное выражение даты, времени или отметки времени. Попробуйте запрос еще раз.

Ответы [ 2 ]

1 голос
/ 09 октября 2016

Как на самом деле написано в DB2 v5r3 для i5 / OS [а также в DB2 для IBM i 7.3]:

create function add_months             
( inputDate   DATE                     
, monthsToAdd INTEGER                  
) returns DATE                         
language SQL DETERMINISTIC             
  RETURN inputDate + monthsToAdd MONTHS

select add_months(date'2016-04-12', 6)
from sysibm.sysdummy1
-- likeness of a report from above query follows:
ADD_MONTHS
2016-10-12
1 голос
/ 25 января 2011

Это простое исправление:

set result = inputDate + monthsToAdd MONTHS;
...