mysql函数if / else

时间:2009-10-13 18:03:56

标签: mysql

我有一个返回日期字符串的函数。我需要这个,因为我不能在视图中使用变量,但我可以使用一个函数来返回我提前设置的变量...

所以我完成了所有工作,但后来我决定,如果没有设置日期变量,我希望它返回当前日期。我认为下面的代码可行,但我得到语法错误......

DELIMITER $$

USE `cc`$$

DROP FUNCTION IF EXISTS `ox_date`$$

CREATE  FUNCTION `ox_date`() RETURNS CHAR(50) CHARSET latin1
DECLARE ox VARCHAR(20)
IF @oxdate <1 THEN SET ox = CURDATE$$
ELSE SET ox = @oxdate$$

RETURN ox $$

DELIMITER ;

我先尝试过isnull,但是没有任何帮助。

2 个答案:

答案 0 :(得分:1)

我不是专家,但这里有一些我看到的东西。

首先,你有

DELIMITER $$

然后在函数本身中使用它。 DELIMITER行允许您在函数体内使用分号。否则';'会过早地结束CREATE FUNCTION语句。

此外,该行

DECLARE ox varchar(20)

最后缺少分号。

然后你错过了

END IF; 

在其他条件之后。

那么BEGIN END $$又围绕着函数的定义呢?

我希望存储的函数通常采用以下形式:

DELIMITER $$
DROP FUNCTION IF EXISTS `testdb`.MyFunc$$
CREATE FUNCTION `testdb`.`MyFunc` () RETURNS INT
BEGIN
   DECLARE someVar varchar(20);
   # some stuff
   RETURN something;
END $$

DELIMITER ;

修改功能的内容以满足您的需要并根据需要设置返回类型。

无论如何,我不是专家,但这就是我所看到的,希望有所帮助。

答案 1 :(得分:0)

为什么你需要摆弄分隔符?对于简单的逻辑,更喜欢IF函数到IF语句。

CREATE FUNCTION `ox_date`( )
RETURNS CHAR(50) CHARSET latin1
RETURN IF(@oxdate < 1 OR @oxdate IS NULL, CURDATE(),@oxdate)

否则

DELIMITER $$

USE `cc`$$

DROP FUNCTION IF EXISTS `ox_date`$$

CREATE FUNCTION `ox_date`( )
RETURNS CHAR(50) CHARSET latin1
RETURN IF(@oxdate < 1 OR @oxdate IS NULL, CURDATE(),@oxdate)$$

DELIMITER ;