2016-08-03 98 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子句過濾掉。