2

我正在编写一个带有单个 datetime 参数的 mysql 存储过程。它在这样的选择语句中使用它..

select *
from table
where date >= @datefrom or @datefrom is null

当我编写 t-sql 查询时,这通常可以解决问题,但它似乎不适用于 mysql。

我也尝试过其他变体,例如

where date >= ifnull(@datefrom, date)

并且

where ((date >= @datefrom and @datefrom is not null) or (@datefrom is null))

但我没有得到我期望的结果..

有人可以对此有所了解吗?

这样的程序定义..

CREATE DEFINER=`root`@`%` PROCEDURE `prc_xxxxxx`(datefrom datetime)
BEGIN

select * from table
where date >= @datefrom or @datefrom is null

END

然后我会这样打电话..

call prc_xxxxxx ('2012-07-04 00:00:00')

或者

call prc_xxxxx (null)
4

1 回答 1

0

正如已经提到的,@ 符号用于会话变量,而不是存储的例程参数——那些应该不带前缀。例如:

CREATE PROCEDURE `proc_IN` (IN var1 INT)  
BEGIN  
    SELECT var1 + 2 AS result;  
END//

此示例取自本教程

于 2012-07-04T09:17:34.617 回答