MySQL使用条件创建函数

时间:2016-08-03 01:47:40

标签: mysql

我正在尝试创建一个mysql函数,条件是我必须在参数中使用某个单词才能使其工作

CREATE FUNCTION hello (s CHAR(20)) RETURNS CHAR(50) 
DETERMINISTIC 
IF s = NULL 
THEN RETURN CONCAT('Hello World!')

所以如果查询是

SELECT hello(NULL);

然后输出:

+--------------------+
| hello(NULL)        |
+--------------------+
| Hello Hello World! |
+--------------------+

否则不应该返回任何行

当我尝试上面的代码时,它总是返回语法错误。问题是我并不擅长创建mysql函数,尤其是在有条件

的情况下

PS

我尝试了此代码,但出现以下错误

mysql> CREATE FUNCTION hello (s CHAR(20)) RETURNS CHAR(50) 
    -> DETERMINISTIC 
    -> IF s IS NULL 
    -> THEN RETURN CONCAT('Hello World!');
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 4

3 个答案:

答案 0 :(得分:1)

您需要使用IS NULLIS NOT NULL,而不是等号。因此,请将您的查询更改为:

IF s IS NULL 
THEN RETURN CONCAT('Hello World!')

请查看此stackoverflow question中的答案,其中解释了此主题。

答案 1 :(得分:1)

您的函数有几个语法错误:

 DELIMITER &&

 CREATE FUNCTION hello (s CHAR(20)) RETURNS CHAR(50) 
 DETERMINISTIC 
 BEGIN
     IF s IS NULL THEN
         RETURN CONCAT('Hello World!');
     END IF;
 END&&

 DELIMITER ;
  • 尝试定义delimiter
  • 在功能正文中使用beginend
  • end if子句
  • 需要if
  • = null应为is null

答案 2 :(得分:1)

您似乎误解了SELECT中函数的工作原理。您无法使用SELECT中的函数过滤行。

你可以这样做:

select hello(null) as flag
from dual
having flag is not null;

注意:这是HAVING的非标准用法;它是一个MySQL扩展。

函数应该返回一个值。所以,你可以写:

DELIMITER $$
CREATE FUNCTION hello (s CHAR(20)) RETURNS CHAR(50) 
DETERMINISTIC 
BEGIN
    RETURN(CASE WHEN s IS NULL 'Hello World!' END)
END;
$$
DELIMITER ;

此版本显式返回NULLHAVING子句会过滤掉。{/ p>