2009-08-04 74 views
5

我有一個奇怪的情況。我必須在Oracle和MySQL中使用NVL(columna,columnb)。我無法更改SQL,因爲它是我無法編輯的軟件包,但它是唯一不適用於MySQL和Oracle之間的應用程序。mysql函數提供相當於Oracle的NVL

我將如何在MySQL中編寫NVL()。我在這裏看過(http://dev.mysql.com/doc/refman/5.0/en/create-function-udf.html),看起來我必須用C編寫它並將其鏈接到MySQL。

但是http://dev.mysql.com/doc/refman/5.0/en/create-procedure.html似乎說我可以在不編譯附加的情況下做到這一點。

我試過這個,但它不起作用。 我做錯了什麼

CREATE FUNCTION NVL (first DATETIME, second DATETIME) 
RETURNS DATETIME 
begin 
DECLARE first DATETIME; 
DECLARE second DATETIME; 
DECLARE return_value DATETIME; 
SET return_value = IFNULL(first,second); 
RETURN return_value; 
end 

回答

8

使用COALESCE,它的更簡單:

DELIMITER $$ 

CREATE FUNCTION NVL (first DATETIME, second DATETIME) 
RETURNS DATETIME 
BEGIN 
     RETURN COALESCE(first, second); 
END 

$$ 

DELIMITER ; 
+0

這是爆炸! – 2009-08-04 15:01:32