Mysql Date 在 where 子句中?

标签 mysql stored-procedures

这是我的存储过程

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/

相关文章:

php - 何时使用 PDO exec() vs execute() vs query()

php - MySQL FROM_UNIXTIME

mysql - 查找 1-100 之间可被 3 和 2 整除的数字的过程

mysql - 始终从表中选择 x 行,并在最后重新开始

postgresql - 选择整数返回函数结果到变量 postgres

sql - 当存储过程结束时,即使嵌套在另一个 SP 中,是否会释放通过 "select for update"获得的锁?

mysql - 数据库管理- 类(class)招生

mysql - 返回计算结果集的存储过程

mysql - 无法获得适用于 has_many 的动态条件 :through (+ ownership)

mysql - 在存储过程内调用存储过程时出现语法错误