我在myqsl的function中写了这么一句:
SELECT COUNT(*) into intWorkDays FROM bf_Calendar where date between CAST('2009-01-14 15:23:36' AS datetime) and CAST('2009-01-16 15:00:00' AS datetime) and workday='0';可是我在下面调用intWorkDays 变量时,intWorkDays =0,并没有得到我想要的值整个function的代码如下:
CREATE DEFINER=`root`@`localhost` FUNCTION `NewFunction`(TimeFrom DateTime,TimeTo DateTime) RETURNS int(11)
BEGIN
  DECLARE  intWorkDays int;
  DECLARE  intMinutes int;
  DECLARE  WorkDay char(1);
  DECLARE  Time800 datetime;
  DECLARE  Time1200 datetime;
  DECLARE  Time1700 datetime;
  DECLARE  Time1300 datetime;
  DECLARE  TimeFromDate dateTime;
  DECLARE  TimeToDate dateTime;
  DECLARE  TimeFromTime dateTime;
  DECLARE  TimeToTime dateTime;
  DECLARE  AMMinues int;
  DECLARE  PMMinutes int ; 
   
    set TimeFromDate= cast( date(TimeFrom) as datetime);
    
    set TimeFromTime= FROM_UNIXTIME( UNIX_TIMESTAMP(TimeFrom) - UNIX_TIMESTAMP(TimeFromDate));
    set TimeToDate= cast( date(TimeTo) as datetime);
  
set TimeToTime=  FROM_UNIXTIME( UNIX_TIMESTAMP(TimeTo) - UNIX_TIMESTAMP(TimeToDate)); set Time800 =CAST('1970-01-01 16:00:00' AS dateTime);
set Time1200=CAST('1970-01-01 19:55:00' AS dateTime);
set Time1300=CAST('1970-01-01 20:55:00' AS dateTime);
set Time1700=CAST('1970-01-02 01:00:00' AS dateTime);
set AMMinues=235;
set PMMinutes=480-AMMinues; SELECT COUNT(*) into intWorkDays FROM bf_Calendar where date between TimeFromDate and TimeToDate and workday='0';
  
    set intMinutes = intWorkDays*8*60;
 
    select workday into WorkDay from bf_calendar where date=TimeFromDate;
  
if WorkDay ='0' then

    if (TimeFromTime >= Time800 and TimeFromTime <= Time1200) then
        set intMinutes = intMinutes-TIMESTAMPDIFF(MINUTE,Time800,TimeFromTime); 
    elseif (TimeFromTime>Time1200 and TimeFromTime<Time1300) then
         set intMinutes=intMinutes-AMMinues;
    elseif (TimeFromTime>=Time1300 and TimeFromTime<=Time1700) then
    set intMinutes=intMinutes-AMMinues-TIMESTAMPDIFF(MINUTE,Time1300,TimeFromTime);
   
    elseif (TimeFromTime>Time1700) then
    set intMinutes=intMinutes-8*60;
    end if;
end if; select workday into WorkDay from bf_calendar where date=TimeToDate;

if WorkDay ='0' then 

    if (TimeToTime<Time800) then 
    set intMinutes=intMinutes-8*60;
    end if;
    if (TimeToTime>=Time800 and TimeToTime<=Time1200) then
         set intMinutes=intMinutes-(8*60-TIMESTAMPDIFF(MINUTE,Time800,TimeToTime));
    elseif (TimeToTime>Time1200 and TimeToTime<Time1300) then 
     set intMinutes=intMinutes-PMMinutes;     elseif (TimeToTime>=Time1300 and TimeToTime<=Time1700) then
     set intMinutes=intMinutes-TIMESTAMPDIFF(MINUTE,TimeToTime,Time1700);
end if;
end if;
     return intMinutes;
  
END;请高手帮忙看看问题,感激不尽。

解决方案 »

  1.   

    有2个问题:1、变量名不要跟字段名一样,会引起很多意想不到的问题。
    2、类似“select workday into WorkDay from ...”
    写法改成“select WorkDay = workday from ...”
      

  2.   

    当您的问题得到解答后请及时结贴.
    http://topic.csdn.net/u/20090501/15/7548d251-aec2-4975-a9bf-ca09a5551ba5.html
      

  3.   

    谢谢vinsonshen的解答,问题我解决了,确实像你说的一样,变量名和column name不能一样。另外 在Mysql中不能用“=”给变量赋值,因为我之前就是那样做的会报错。