Хранимая функция в MySQL не любит введенные пользователем даты?

StackOverflow https://stackoverflow.com/questions/1235895

Вопрос

У меня есть сохраненная функция в MySQL:

CREATE FUNCTION `login_count`(o INT, start_date DATE, end_date DATE) RETURNS INT
READS SQL DATA
BEGIN
DECLARE total_count INT;
SELECT COUNT(*) INTO total_count FROM logins as l WHERE `order_id` = o && modified BETWEEN start_date AND end_date; 
RETURN total_count; 
END

Довольно простой, берет идентификатор, дату начала и дату окончания и возвращает количество входов в систему для этого диапазона дат. Всякий раз, когда я запускаю его, я получаю 0 обратно. Если только я не удалил раздел даты в предложении where. Затем он возвращает фактическое число. ИЛИ, если я просто вручную помещаю даты в сохраненную функцию, она работает ... Так что это не проблема дат, а только когда я предоставляю даты через список параметров, это не нравится.

Есть мысли о том, что могло бы вызвать это? Тот факт, что я могу просто вручную поместить даты в хранимую функцию, и она работает, действительно меня беспокоит. Не то, чтобы здесь происходило что-то, что могло бы испортить меня, и я как будто заблудился, что попробовать дальше.

Кроме того, есть ли способ отладки хранимых функций / процедур. Я просто получаю 0 обратно, но есть ли способ отладить это, чтобы попытаться выяснить, что может происходить?

Это было полезно?

Решение

Мое первое предположение состоит в том, что вы предоставляете даты в формате, который MySQL не распознает. MySQL довольно требователен к формату литералов даты. Требуется ГГГГ-ММ-ДД, ГГГ-ММ-ДД, ГГГГММДД или ГГММДД (вы можете использовать любой другой знак пунктуации вместо тире). См. типы DATETIME, DATE и TIMESTAMP для получения дополнительной информации. .

Вы также можете преобразовать больше форматов дат в формат, принятый MySQL, с помощью STR_TO_DATE () function.

Что касается отладки хранимых процедур и хранимых функций, вы всегда можете задать пользовательскую переменную с префиксом @ , и эта переменная станет общедоступной после возврата хранимой функции. Как побочный эффект. Таким образом, вы можете использовать это для установки диагностической информации во время выполнения сохраненной функции, а затем проверить ее позже.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top