用乙個時間段限制,判斷當前日期在計算月平均的時候應當除以的天數。
如:起始日期 ***x-03-30
截止日期 ***x-05-03
當前日期是select中的乙個字段,可能在3月份,可能在4月份,可能在5月份。
在3月份:總數/2,4月份:總數/30,5月份:總數/3
begin
declare _res int ;
declare _except int ;
/** * 用乙個時間段限制,判斷當前日期在計算月平均的時候
* 應當除以的天數(如:3月30號到5月3號,3月份除以2,4月份除以30,5月份除以3)
* cur:當前日期
* start:開始日期
* cur:截止日期
* * @params cur varchar(19),start varchar(19),end varchar(19)
* 格式:yyyy-mm-dd
* @retrun 除數
* */
set _res = 0 ;
set _except = -1 ;
if(datediff(end,start) < 0) then return _except ;
elseif(end='' || start='') then return _except ;
elseif(isnull(start) || isnull(end)) then return _except ;
elseif(datediff(end,cur) < 0 || datediff(cur,start) < 0 ) then return _except ;
elseif(isnull(date_format(start,'%y-%m-%d'))=1
||
isnull(date_format(cur,'%y-%m-%d'))=1
||
isnull(date_format(end,'%y-%m-%d'))=1
) then return _except ;
end if;
-- 1.起始,截止在同乙個月
if (datediff(end,start) <= datediff(last_day(start),start))
then set _res = datediff(end,start) + 1;
-- 2.起始,截止不在同乙個月
else
-- 2.1當前日期在起始月內
if (datediff(cur,start) <= datediff(last_day(start),start))
then set _res = datediff(last_day(cur),start) + 1;
-- 2.2當前日期在結束月內
elseif (datediff(end,cur) <= (day(end) - 1))
then set _res = day(end);
-- 2.3當前日期在正常月內
else set _res = day(last_day(cur));
end if ;
end if;
return _res ;
end
執行sql:
select
getdivsformonintval('2016-03-31','2016-03-30','2016-05-03') as _3
,getdivsformonintval('2016-04-18','2016-03-30','2016-05-03') as _4
,getdivsformonintval('2016-05-01','2016-03-30','2016-05-03') as _5 ;
結果: mysql 按自定義的規則排序
有些時候取資料時的排序規則需要為自己的指定規則,如 1 3 2 0這種,所以需要在取資料時指定排序規則,具體方法如下 select user from user where user status in 0,1,2,3 order by field user status 1,0,2,3 這樣就可以...
統計素數並求和(自定義函式法)
7 6 統計素數並求和 10分 本題要求統計給定整數m和n區間內素數的個數並對它們求和。輸入格式 輸入在一行中給出兩個正整數m和n 1 m n 500 輸出格式 在一行中順序輸出m和n區間內素數的個數以及它們的和,數字間以空格分隔。輸入樣例 10 31 輸出樣例 7 143 為了以後的方便,本題採用...
自定義的列印函式
void userdefinedprintfun char format,int i,else if format 1 format d else if format 1 format f va end arg ptr return 如果採用下面三種方法呼叫,合法合理 userdefinedprin...