MYSQL在函数不能用
SELECT 变量 = tbl_filed FORM tbl
的语句吗?如下:DROP FUNCTION IF EXISTS fn_name;
delimiter //
CREATE FUNCTION fn_name (DailyDate DATETIME,returntype SMALLINT) 
RETURNS DECIMAL(18, 1)
 BEGIN 
DECLARE BDate DATETIME; 
DECLARE qty_return DECIMAL(18, 1); DECLARE `MaxValue` DECIMAL(18, 1); DECLARE `MinValue` DECIMAL(18, 1); 
SET qty_return = 0; 
SELECT  `MaxValue` = ROUND(IFNULL(MAX(Airtemp),0),1) , `MinValue` = ROUND(IFNULL(MIN(Airtemp),0),1)  
FROM tbl_name WHERE InDateTime > DATE_ADD(BDate, INTERVAL 23 HOUR) AND InDateTime < DATE_ADD(BDate, INTERVAL '1 0:5' DAY_MINUTE);  IF (returntype = 0) THEN SET qty_return = `MinValue` ; ELSEIF (returntype = 1) THEN SET qty_return = `MaxValue`; END IF; RETURN qty_return; END//
delimiter ;
当去掉SELECT  `MaxValue` = ROUND(IFNULL(MAX(Airtemp),0),1) , `MinValue` = ROUND(IFNULL(MIN(Airtemp),0),1)  
FROM hy_tmpr_c WHERE SingInDateTime > DATE_ADD(BDate, INTERVAL 23 HOUR) AND SingInDateTime < DATE_ADD(BDate, INTERVAL '1 0:5' DAY_MINUTE); 编译就通过了,否则出现错误提示:
"Not allowed to return a result set from a from"但是这句才是这个函数的主要功能,怎么办?

解决方案 »

  1.   

    SELECT   ROUND(IFNULL(MAX(Airtemp),0),1) ,ROUND(IFNULL(MIN(Airtemp),0),1) 
    into `MaxValue` ,  `MinValue`  
    FROM tbl_name WHERE InDateTime > DATE_ADD(BDate, INTERVAL 23 HOUR) AND InDateTime < DATE_ADD(BDate, INTERVAL '1 0:5' DAY_MINUTE); 
      

  2.   


    select ...into 的语法我也用过了,也不行。
    这样可以:
    ROUND(IFNULL(MAX(Airtemp),0),1) into `MaxValue`
    但这样不行
    ROUND(IFNULL(MAX(Airtemp),0),1) into `MaxValue`,  ROUND(IFNULL(MIN(Airtemp),0),1) into `MinValue`分两次?
      

  3.   

    上面1楼都回答了
    select a1,a2,a3... into 变量1,变量2... from tb
      

  4.   

    仔细看看
    SELECT ROUND(IFNULL(MAX(Airtemp),0),1) ,ROUND(IFNULL(MIN(Airtemp),0),1)  
    into `MaxValue` , `MinValue`   
    FROM tbl_name WHERE InDateTime > DATE_ADD(BDate, INTERVAL 23 HOUR) AND InDateTime < DATE_ADD(BDate, INTERVAL '1 0:5' DAY_MINUTE);
      

  5.   

    SELECT 变量 :=  tbl_filed FORM tbl
    或者
    SELECT  tbl_filed into 变量  FORM tbl
      

  6.   

    := 这个操作符,貌似pascal的赋值运算符。
      

  7.   

    在MYSQL SELECT中变量赋值
     SELECT  `MaxValue` := ROUND(IFNULL(MAX(Airtemp),0),1) , `MinValue`:= ROUND(IFNULL(MIN(Airtemp),0),1)  
    FROM tbl_name WHERE InDateTime > DATE_ADD(BDate, INTERVAL 23 HOUR) AND InDateTime < DATE_ADD(BDate, INTERVAL '1 0:5' DAY_MINUTE); 
      

  8.   


    用户变量的形式为@var_name,
    必须加@吗?是不是如果没用@,执行FUNCTION 返回出来的标值就为NULL?