这是我的存储过程
DELIMITER $$
DROP PROCEDURE IF EXISTS `simplesign`.`GetTenantTaskBetweenDate` $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `GetTenantTaskBetweenDate`(
IN tid VARCHAR(100),
IN fromdate DATE ,
IN todate DATE,
IN searchvalue VARCHAR(100)
)
BEGIN
SELECT RequestID
FROM task
WHERE ( (TenantID=tid)
AND Create_date BETWEEN fromdate AND todate)
AND (File_name LIKE searchvalue || File_title LIKE searchvalue)
ORDER BY Create_date DESC;
END $$
DELIMITER ;
在以下情况下,我想要 task
表中的所有 ReuestID
:
- 如果 fromdate 和 todate 为 null,则按 searchValue 搜索
- 如果 fromdate、todate 和 searchValue 不为 null,则通过所有三个输入进行搜索
- 如果 fromdate 或 todate 为 null,则通过 searchValue 进行搜索
- 如果 searchValue 为 null,则按 fromdate 和 todate 进行搜索
- 如果所有三个输入均为 null,则正常搜索,如
(select * from)
请帮我解决这个问题。
最佳答案
听起来您不想使用所有不为空的条件
DELIMITER $$
DROP PROCEDURE IF EXISTS `simplesign`.`GetTenantTaskBetweenDate` $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `GetTenantTaskBetweenDate`(
IN tid VARCHAR(100),
IN fromdate DATE ,
IN todate DATE,
IN searchvalue VARCHAR(100)
)
BEGIN
SELECT RequestID
FROM task
WHERE (tid is null OR TenantID=tid)
AND (fromdate is null OR Create_date >= fromdate)
AND (todate is null OR Create_date <= todate)
AND (searchvalue is null OR File_name LIKE searchvalue OR File_title LIKE searchvalue)
ORDER BY Create_date DESC;
END $$
DELIMITER ;
关于Mysql Date 在 where 子句中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23347405/