1.Mysql 自定义函数
drop function if exists get_date;
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;
2. 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 := 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;
3. 区别
- Mysql没有 create or replace function, 可以用drop ...代替
- Mysql是returns而 Oracle是return
- Mysql是varchar , Oracle是 varchar2
- Mysql 没有as, 定义变量在begin之内, Oracle有 as, 变量定义在as之后
- Mysql设置变量值用的是
set XXX = ...
而Oracle是XXX := ....
- Mysql使用now(),而Oracle是sysdate
- 日期处理的一些不同,比如像使用date_format而不是to_char, 这里要用date_add处理日期-1,而Oracle只要直接-1处理即可