我在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;请高手帮忙看看问题,感激不尽。
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;请高手帮忙看看问题,感激不尽。
2、类似“select workday into WorkDay from ...”
写法改成“select WorkDay = workday from ...”
http://topic.csdn.net/u/20090501/15/7548d251-aec2-4975-a9bf-ca09a5551ba5.html