MySQL过滤可能的空值

时间:2012-07-04 07:14:19

标签: mysql sql where-clause

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

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)

1 个答案:

答案 0 :(得分:0)

如前所述,@符号用于session variables,而不是用于存储的例程参数 - 这些参数应该没有前缀。 E.g:

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

此示例取自this tutorial