首页 > 解决方案 > 具有两个输入日期时间值的 MySQL 存储过程不返回结果

问题描述

因此,我正在解决一个示例问题,即在 MySQL 中为存储过程使用日期范围的两个输入值。我能够成功创建过程,并且连接可以毫无错误地检索数据,但是当我实际尝试使用存储过程并输入开始日期和结束日期时,我没有得到任何数据。知道为什么吗?

DELIMITER $$
USE northwind$$
CREATE PROCEDURE order_details_date(in begin_date DATETIME, in end_date DATETIME)
BEGIN 
SELECT 
    e.EmployeeID,
    e.FirstName,
    e.LastName,
    e.Region,
    o.OrderID,
    o.OrderDate,
    o.ShipRegion
FROM
    employees e
JOIN
    orders o ON e.EmployeeID = o.EmployeeID
WHERE o.OrderDate >= @begin_date AND
    o.OrderDate <= @end_date
ORDER BY o.OrderDate;
END$$
DELIMITER ;

需要明确的是,我没有收到错误,我只是得到一个没有数据的查询结果。任何帮助,将不胜感激!

标签: mysqldatetime

解决方案


当您@在变量名前面使用时,您指的是用户定义的会话变量,而不是过程的输入。您需要删除@这些名称前面的符号,即

SELECT 
    e.EmployeeID,
    e.FirstName,
    e.LastName,
    e.Region,
    o.OrderID,
    o.OrderDate,
    o.ShipRegion
FROM
    employees e
JOIN
    orders o ON e.EmployeeID = o.EmployeeID
WHERE o.OrderDate >= begin_date AND
    o.OrderDate <= end_date
ORDER BY o.OrderDate;

请注意,您可以BETWEEN用作速记,例如

o.OrderDate BETWEEN begin_date AND end_date

推荐阅读