2016-08-03 94 views
0

我试图创建一个具有条件的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 

回答

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 ifif条款
  • = nullis null
1

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

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

请检查此stackoverflow question的解答此主题的答案。

+0

我尝试了你的建议..但得到了一个错误..检查我更新的问题 –

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 ; 

这个版本明确回报NULL,其中HAVING子句过滤掉。