Обработка дат как параметров IN хранимой процедуры MySQL - PullRequest
0 голосов
/ 19 января 2019

Чего я хочу достичь Я создаю Procedure в моей базе данных MySQL, которая получит столбец «Сумма чистой суммы», помеченный как netamt, где Дата покупки, помеченная как purdate, находится между StartDate и EndDate. Я попробовал два отдельных способа с моим SQL-запросом. Когда я запускал запрос CREATE, MySQL принимал его и создавал мой Procedure. Но когда я пытаюсь вызвать Procedure, возвращается NULL.

Мой SQL-запрос

Вот как выглядит мой первый CREATE код:

CREATE DEFINER=`*****`@`localhost` PROCEDURE `Payable_Total_Net`(
  IN startDate DATE,
  IN endDate DATE,
  OUT totalNet DECIMAL(19,4)
)
BEGIN
 SELECT
    SUM(COALESCE(p.netamt,0)) INTO totalNet
    FROM Payables p
    WHERE p.purdate  >= str_to_date(startDate, '%Y-%m-d%') AND p.purdate <= str_to_date(endDate, '%Y-%m-d%');
END

Вот как выглядит мой второй CREATE код:

CREATE DEFINER=`*****`@`localhost` PROCEDURE `Payable_Total_Net`(
  IN startDate DATE,
  IN endDate DATE,
  OUT totalNet DECIMAL(19,4)
)
BEGIN
 SELECT
    SUM(COALESCE(p.netamt,0)) INTO totalNet
    FROM Payables p
    WHERE p.purdate  BETWEEN str_to_date(startDate, '%Y-%m-d%') AND  str_to_date(endDate, '%Y-%m-d%');
END

Вот так выглядит обычный запрос с правильным результатом:

SELECT
SUM(COALESCE(p.netamt,0)) as totalNet
FROM Payables p
WHERE p.purdate BETWEEN '2018-01-01' AND '2018-12-31'

Вот как я называю Procedure:

Call Payable_Total_Net('2018-01-01','2018-12-31',@totalNet);
SELECT @totalNet;

Моя текущая хранимая процедура My Currently Stored Procedure

Мои запросы для вызова хранимой процедуры My Queries to Call Procedure

Результат, если я выполню оба запроса одновременно Result if Query All

Результат, если я только выполню запрос Выбрать Result if I Query Select

Это мой ожидаемый результат с использованием обычного запроса enter image description here

1 Ответ

0 голосов
/ 19 января 2019

Вы передаете значения как даты. Вам не нужно конвертировать их:

CREATE DEFINER=`*****`@`localhost` PROCEDURE `Payable_Total_Net`(
  IN in_startDate DATE,
  IN in_endDate DATE,
  OUT out_totalNet DECIMAL(19,4)
)
BEGIN
  SELECT COALESCE(SUM(p.netamt), 0) INTO out_totalNet
  FROM Payables p
  WHERE p.purdate >= in_startDate AND 
        p.purdate <= in_endDate;
END;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...