mysql函数提供相当于Oracle NVL的功能

时间:2009-08-04 13:16:59

标签: mysql oracle function

我有一个奇怪的情况。我必须在Oracle和MySQL中使用NVL(columna,columnb)。我无法更改SQL,因为它在我无法编辑的包中,但它是我在MySQL和Oracle之间的应用程序中唯一不起作用的。

我如何在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

2 个答案:

答案 0 :(得分:10)

使用COALESCE,它更简单:

DELIMITER $$

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

$$

DELIMITER ;

答案 1 :(得分:4)

我认为COALESCE()方法就是您所需要的。

http://dev.mysql.com/doc/refman/5.0/en/comparison-operators.html#function_coalesce