首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mysql函数if/else

问mysql函数if/else
EN

Stack Overflow用户
提问于 2009-10-13 18:03:56
回答 2查看 4.4K关注 0票数 1

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

所以我得到了所有的结果,但是我决定如果没有设置日期变量,我想让它返回当前的日期。我认为下面的代码可以工作,但我得到了语法错误...

代码语言:javascript
复制
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,但没有任何帮助。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-10-13 21:50:28

为什么你需要摆弄分隔符?对于简单的逻辑,建议使用IF函数而不是IF语句。

代码语言:javascript
复制
CREATE FUNCTION `ox_date`( )
RETURNS CHAR(50) CHARSET latin1
RETURN IF(@oxdate < 1 OR @oxdate IS NULL, CURDATE(),@oxdate)

否则

代码语言:javascript
复制
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 ;
票数 0
EN

Stack Overflow用户

发布于 2009-10-13 18:42:13

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

首先,你有

代码语言:javascript
复制
DELIMITER $$

然后在函数本身中使用它。这行分隔符允许您在函数体中使用分号。否则,';‘将过早结束CREATE FUNCTION语句。

另外,这一行

代码语言:javascript
复制
DECLARE ox varchar(20)

末尾缺少分号。

然后你就错过了

代码语言:javascript
复制
END IF; 

在else条件之后。

另外,围绕函数定义的BEGIN END$$又如何呢?

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

代码语言:javascript
复制
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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1561940

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档