我正在尝试创建一个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
答案 0 :(得分:1)
您需要使用IS NULL
或IS 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
begin
,end
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 ;
此版本显式返回NULL
,HAVING
子句会过滤掉。{/ p>