2012-07-04 34 views
2

我正在寫一個採用單個日期時間參數的mysql存儲過程。它使用它在一個select語句這樣..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) 
+0

您是否正在運行此查詢?與查詢中的@ – Dojo

+0

是 - 與@ – Grant

+0

嘗試使用'NULL'安全的相等運算符['<=>'](http://dev.mysql.com/doc/en/comparison-operators.html#operator_equal-to)。 – eggyal

回答

0

如已經提到的,@符號被用於對於session variables,不適用於存儲的常規參數 - 這些參數應前綴前綴。例如:

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

本例取自this tutorial

+0

哦 - 所以我們doint使用'@'就像在T-SQL? – Grant

+0

MySQL和Oracle都不使用'@'來存儲常規參數。 –