我有一个返回日期字符串的函数。我需要这个,因为我不能在视图中使用变量,但我可以使用一个函数来返回我提前设置的变量...
所以我完成了所有工作,但后来我决定,如果没有设置日期变量,我希望它返回当前日期。我认为下面的代码可行,但我得到语法错误......
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,但是没有任何帮助。
答案 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 ;