2011-09-13 38 views
0

這個函數有什麼問題。這裏是我的預期輸出是MySQL爲等值數值範圍創建函數

1 = 10 
2 to 3 = 7 
4 to 10 = 5 
11 to 30 = 2 
31 to 100 = 1 


DELIMITER $$ 
DROP FUNCTION IF EXISTS `computeScore`$$ 
CREATE DEFINER=`root`@`localhost` FUNCTION `computeScore`(`POS` INT(11)) RETURNS int(11) 
    READS SQL DATA 
    DETERMINISTIC 
BEGIN 
    DECLARE ordinal INT; 
    SELECT (
     CASE 
      WHEN POS < 2 THEN 10 
      WHEN POS >= 2 < 4 THEN 7 
      WHEN POS >= 4 < 11 THEN 5 
      WHEN POS >= 11 < 31 THEN 2 
      ELSE 1 
     END) 
    INTO ordinal; 
    RETURN ordinal; 
    RETURN 0; 
END; 

$$ 

DELIMITER ; 

輸出:我總是得到10

+0

什麼是你的實際輸出? – Poodlehat

+0

電流輸出是多少? – CristiC

+0

加了輸出,我總是得到10 –

回答

0

試試這個:

SELECT (
     CASE 
      WHEN POS < 2 THEN 10 
      WHEN POS >= 2 && POS < 4 THEN 7 
      WHEN POS >= 4 && POS < 11 THEN 5 
      WHEN POS >= 11 && POS < 31 THEN 2 
      ELSE 1 
     END) 
0

CASE部分應

CASE 
     WHEN POS < 2 THEN 10 
     WHEN POS >= 2 AND POS < 4 THEN 7 
     WHEN POS >= 4 AND POS < 11 THEN 5 
     WHEN POS >= 11 AND POS < 31 THEN 2 
     ELSE 1 
    END 
0

有什麼不對?

從關於SELECT..INTO statament的參考文獻 - 此SELECT語法將所選列直接存儲到變量中。因此,只能檢索一行。

檢查查詢是否返回一條記錄。

編輯:

的代碼可以是這樣的 -

SET ordinal = CASE 
    WHEN pos < 2 THEN 10 
    WHEN pos >= 2 AND pos < 4 THEN 7 
    WHEN pos >= 4 AND pos < 11 THEN 5 
    WHEN pos >= 11 AND pos < 31 THEN 2 
    ELSE 1 
END; 
+0

還有一行。沒有使用FROM。 – CristiC

+0

你說得對。所以,ain的答案應該有所幫助。 – Devart

+0

我編輯了我的答案。 – Devart