mysql存储函数的使用

mysql存储函数的使用,mysql,Mysql,我刚刚编写了一个存储函数来计算两个日期之间的工作日。 这很有效 挑选 统计工作日('2010-03-07'、'2010-04-07') 这不管用 挑选 Count工作日(订单日期、创建日期) 从命令o 你知道怎么做吗 函数定义 分隔符$$ 创建函数CountWeekDays(sdate VARCHAR(50),edate VARCHAR(50)) 返回整数 开始 申报日期、tdiff、计数器、当天 斯莫林 宣布新日期 设置newdate:=sdate 设置wdays=0 如果DATEDIFF(e

我刚刚编写了一个存储函数来计算两个日期之间的工作日。 这很有效

挑选 统计工作日('2010-03-07'、'2010-04-07')

这不管用

挑选 Count工作日(订单日期、创建日期) 从命令o

你知道怎么做吗

函数定义

分隔符$$

创建函数
CountWeekDays
(sdate VARCHAR(50),edate VARCHAR(50)) 返回整数

开始

申报日期、tdiff、计数器、当天 斯莫林

宣布新日期

设置newdate:=sdate

设置wdays=0

如果DATEDIFF(edate,sdate)=0,则 返回1;如果结束

如果DATEDIFF(edate,sdate)<0,则 返回0;如果结束

标签1:环

设置thisday=DAYOFWEEK(newdate)

如果这一天介于2和6之间,则设置 wdays:=wdays+1;如果结束

设置newdate=DATE\u添加(newdate, 间隔1天)

如果DATEDIFF(edate,newdate)<0,则 离开标签1;如果结束

末端环标签1

返程天数

结束


我不太了解函数,但如果它有效,请尝试,如果无效,请抱歉

select CountWeekDays(o.order_date,o.created_date) from orders o where o.id =1;

它与数据类型有关。。以下功能运行良好

SET GLOBAL log_bin_trust_function_creators=1;
DROP FUNCTION IF EXISTS BizDaysInclusive;
DELIMITER | 
CREATE FUNCTION BizDaysInclusive( d1 DATE, d2 DATE ) 
RETURNS INT 
DETERMINISTIC 
BEGIN 
DECLARE dow1, dow2, days INT;
SET dow1 = DAYOFWEEK(d1);
SET dow2 = DAYOFWEEK(d2);
SET days = FLOOR( DATEDIFF(d2,d1)/7 ) * 5 + 
CASE
WHEN dow1=1 AND dow2=7 THEN 5 
WHEN dow1 IN(7,1) AND dow2 IN (7,1) THEN 0
WHEN dow1=dow2 THEN 1 
WHEN dow1 IN(7,1) AND dow2 NOT IN (7,1) THEN dow2-1 
WHEN dow1 NOT IN(7,1) AND dow2 IN(7,1) THEN 7-dow1
WHEN dow1<=dow2 THEN dow2-dow1+1
WHEN dow1>dow2 THEN 5-(dow1-dow2-1)
ELSE 0
END;
RETURN days;
END;
|
DELIMITER ; 

SELECT BizDaysInclusive('2009-8-1','2009-9-15');

select substr(o.order_date,1,10) a ,substr(o.created_date,1,10) b, CountWeekDays(substr(o.order_date,1,10),substr(o.created_date,1,10)) c from orders o WHERE o.order_date like '2010-04-08%' ;
设置全局日志\u bin\u信任函数\u creators=1;
如果存在BizDaysInclusive,则删除函数;
定界符|
创建函数BizDaysInclusive(d1日期、d2日期)
返回整数
确定性
开始
宣布dow1,dow2,整数天;
SET dow1=星期一(d1);
SET dow2=星期二(d2);
设定天数=楼层(日期差(d2,d1)/7)*5+
案例
当dow1=1和dow2=7时,则为5
当(7,1)中的dow1和(7,1)中的dow2时,则为0
当dow1=dow2时,则为1
当dow1在(7,1)中且dow2不在(7,1)中时,则dow2-1
当dow1不在(7,1)和dow2在(7,1)中时,则为7-dow1
当dow1dow2时,则为5-(dow1-dow2-1)
其他0
终止
返程天数;
终止
|
定界符;
选择BizDaysInclusive('2009-8-1','2009-9-15');
从订单o中选择substr(o.order_date,1,10)a、substr(o.created_date,1,10)b、CountWeekDays(substr(o.order_date,1,10)、substr(o.created_date,1,10))c,其中o.order_date类似于“2010-04-08%”;

订单日期和创建日期的列类型是什么?