Не удалось изменить '' на ноль для datetime в хранимой процедуре MySQL

Я написал хранимую процедуру:

CREATE DEFINER=`root`@`localhost` PROCEDURE `SP_create_new_task`(
IN  _taskName       VARCHAR(30),
IN  _description    VARCHAR(500),
IN  _startDate      DATETIME,
IN  _endDate        DATETIME,
IN  _lacation       VARCHAR(30),
IN  _subTo          INT
)
BEGIN

INSERT INTO tm_tasks (taskName, description, startDate, endDate, lacation,      subTo)
VALUES (_taskName, _description, NULLIF(_startDate,''), NULLIF(_endDate,''), _lacation, _subTo);

END

Я запускаю это:

call task_tool.SP_create_new_task('name1 ', 'description1', '', '', 'lacation1', 1);

и получил эту ошибку:

Error Code: 1292. Incorrect datetime value: '' for column '_startDate' at row 1

почему NULLIF() не вводит нулевое значение для _startDate???

для вашего удобства запрос таблицы задач:

CREATE TABLE tm_tasks(
ID              INT         PRIMARY KEY AUTO_INCREMENT,
taskName        VARCHAR(30) NOT NULL,
description     VARCHAR(500),
joinDate        TIMESTAMP,
startDate       DATETIME    NULL DEFAULT NULL,
endDate         DATETIME    NULL DEFAULT NULL,
lacation        VARCHAR(30),
subTo           INT DEFAULT NULL,
ignoreRow       TINYINT(1)  DEFAULT 0
);

Спасибо!

1 ответ

Решение

Вы получаете эту ошибку, потому что она даже не вставляется.

Код ошибки: 1292. Неправильное значение даты и времени: '' для столбца '_startDate' в строке 1

Здесь не получается:

CREATE DEFINER=`root`@`localhost` PROCEDURE `SP_create_new_task`(
IN  _taskName       VARCHAR(30),
IN  _description    VARCHAR(500),
**IN  _startDate      DATETIME**,

Когда вы пытаетесь передать DATETIME параметр.

Что вы пытаетесь сделать:

'' -> параметр _startDate DATETIME -> INSERT -> NULLIF(_startDate, '') -> NULL

должно быть:

NULL -> параметр _startDate DATETIME -> INSERT -> NULL

Проходить NULL прямо и не делать обходной путь с NULLIF(),

CALL task_tool.SP_create_new_task('name1 ', 'description1', NULL, NULL, 'lacation1', 1);
Другие вопросы по тегам