我有一个返回日期字符串的函数。我需要这样做,因为我不能在视图中使用变量,但我可以使用一个函数来返回我提前设置的变量...
所以我得到了所有的结果,但是我决定如果没有设置日期变量,我想让它返回当前的日期。我认为下面的代码可以工作,但我得到了语法错误...
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 ;我在第一个if上尝试了isnull,但没有任何帮助。
发布于 2009-10-13 21:50:28
为什么你需要摆弄分隔符?对于简单的逻辑,建议使用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 ;发布于 2009-10-13 18:42:13
我不是专家,但这里有一些我看到的东西。
首先,你有
DELIMITER $$然后在函数本身中使用它。这行分隔符允许您在函数体中使用分号。否则,';‘将过早结束CREATE FUNCTION语句。
另外,这一行
DECLARE ox varchar(20)末尾缺少分号。
然后你就错过了
END IF; 在else条件之后。
另外,围绕函数定义的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 ;修改函数的内部以满足您的需要,并根据需要设置返回类型。
无论如何,我不是专家,但这就是我所看到的,并希望这对我有所帮助。
https://stackoverflow.com/questions/1561940
复制相似问题