-- mysql 数字函数
-- ABS(x):返回x的绝对值
-- ceil(x):返回不小于x的最小整数值 大于等于
-- mod(x,y) :返回x/y的模 (取余)
-- rand():返回0~1内的随机值
-- round(x,y):返回参数x的四舍五入的有y位小数的值
-- truncate(x,y):返回数字x截断位y位小数的结果
-- mysql 聚合函数
-- avg():返回某列的平均值
-- count():返回某列的行数
-- max():返回某列的最大值
-- min(): 返回某列的最小值
-- sum(): 返回某列之和
select sum(prod_price) from products ;
-- mysql字符串函数
-- concat(s1,s2,....):字符串连接
-- left(str,x):返回字符串str最左边的x个字符
-- lpad(str,n,pad):在str最左边填充n个pad
-- replace(str,s1,s2):用字符串s2替换字符str中所有出现的字符串s1
-- substring(str,x,y):返回从字符串str的x位置起y个字符长度的字符
-- mysql 日期函数
-- now(): 返回当前的日期和时间
-- year(data): 返回日期data的年份
-- date_add(date,interval expr type):返回一个日期或时间值加上一个时间间隔的时间值
-- datediff(expr,expr2):返回起始时间expr和结束时间expr2 之间的天数
-- ifnull(value1,value2):如果value不为空,返回value1,否则返回value2
-- case when [value1] then[result1].....else[default] end:如果value1是真,返回result1,否则返回result
运行结果:
- 函数示例一、二、三,手动敲一遍。
-- 函数示例一
-- 创建一个函数hello(name),返回hello+name;
-- mysql
-- oracle
-- 测试
运行结果:
-- 函数示例二
-- 创建一个函数max_number(var1,var2),返回其中较大的值
-- mysql
-- oracle
-- 测试
运行结果:
-- 函数示例三
-- 根据需求判断输入时间属于前一天或当天,例如小于10点为前一天,超过10点即为当天
-- mysql
create function get_date(v_datetime datetime,v_time varchar(50))
returns varchar(50)
begin
declare v_date varchar(50);
declare cDate varchar(50);
declare beginDate varchar(50);
set cDate=date_format(v_datetime,'%Y-%m-%d %H:%i:%s');
set beginDate=concat(date_format(v_datetime,'%Y-%m-%d'),v_time);
if cDate < beginDate then
set v_date=date_format(date_add(v_datetime,interval -1 day),'%Y-%m-%d');
else
set v_date=date_format(v_datetime,'%Y-%m-%d');
end if;
return v_date;
end;
-- oracle
CREATE OR REPLACE FUNCTION get_date(v_datetime date,v_time varchar2)
RETURN varchar2 AS
v_date varchar2(50);
cDate varchar2(50);
beginDate varchar2(50);
BEGIN
cDate := to_char(v_datetime,'YYYY-MM-DD hh24:mi:ss');
beginDate := concat(to_char(v_datetime,'YYYY-MM-DD'),v_time);
IF cDate < beginDate then
v_date := to_char(v_datetime-1,'YYYY-MM-DD');
ELSE
v_date := to_char(v_datetime,'YYYY-MM-DD');
END IF ;
RETURN v_date;
END;
- 针对函数示例二,在MySQL下创建一个函数get_max_number,用于获取3个整数的最大值。
create function get_max_number(var1 int,var2 int,var3 int)
returns int
begin
-- declare max_number int;
if var1>var2 and var1>var3 then
return var1;
elseif var2>var1 and var2>var3 then
return var2;
else
return var3;
end if;
end;
select get_max_number(1,2,3) from dual;
- 分别在Oracle与MySQL下创建存储过程pro_delete_all_order,用游标的方式从orders表中获取所有订单号,然后将每个订单号的记录删除,包括orders和orderitems的相关记录。
-- MySql
create procedure pro_delete_all_order()
begin
declare c int(11);
declare total int default 0;
declare done int default false;
declare all_order cursor for select o.order_num from orders o;
declare continue handler for not found set done=true;
set total=0;
open all_order;
fetch all_order into c;
while(not done) do
delete from orderitems where order_num=c;
delete from orders where order_num =c;
set total=total+1;
fetch all_order into c;
end while;
close all_order;
select total;
end;
call pro_delete_all_order();
--oracle
CREATE OR REPLACE PROCEDURE pro_delete_all_order
AS
CURSOR all_order IS SELECT * FROM ORDERS o;
BEGIN
FOR temp IN all_order LOOP
DELETE FROM ORDERITEMS o WHERE o.ORDER_NUM =temp.ORDER_NUM;
DELETE FROM ORDERS o WHERE o.ORDER_NUM =temp.ORDER_NUM;
COMMIT;
END LOOP ;
END;
BEGIN
pro_delete_all_order;
END;