SQL写函数 输入参数:日期(YYYYMMDD)和下面某一个参数 返回数据:参数说明...
发布网友
发布时间:2022-05-02 00:24
我来回答
共1个回答
热心网友
时间:2022-04-13 11:45
函数代码:
create or replace function func_date( --创建函数名称func_date
p_yyyymmdd number, --定义参数1
p_num number) --定义参数2
return date --返回结果类型为date
as
v_result date; --声明返回结果变量
begin
if p_num=11
then v_result:=trunc(to_date(p_yyyymmdd,'yyyy-mm-dd'),'mm'); --本月初
elsif p_num=12
then v_result:=trunc(to_date(p_yyyymmdd,'yyyy-mm-dd'),'q'); --本季初
elsif p_num=13
then v_result:=trunc(to_date(p_yyyymmdd,'yyyy-mm-dd'),'yyyy'); --本年初
elsif p_num=21
then v_result:=last_day(to_date(p_yyyymmdd,'yyyy-mm-dd')); --本月末
elsif p_num=22
then v_result:=last_day(add_months(trunc(to_date(p_yyyymmdd,'yyyy-mm-dd'),'q'),2)); --本季度末
elsif p_num=23
then v_result:=last_day(add_months(trunc(to_date(p_yyyymmdd,'yyyy-mm-dd'),'yyyy'),11)); --本年末
elsif p_num=31
then v_result:=add_months(trunc(to_date(p_yyyymmdd,'yyyy-mm-dd'),'mm'),-1); --上月初
elsif p_num=32
then v_result:=add_months(trunc(to_date(p_yyyymmdd,'yyyy-mm-dd'),'q'),-3); --上季初
elsif p_num=33
then v_result:=add_months(trunc(to_date(p_yyyymmdd,'yyyy-mm-dd'),'yyyy'),-12); --上年初
elsif p_num=41
then v_result:=trunc(to_date(p_yyyymmdd,'yyyy-mm-dd'),'mm')-1; --上月末
elsif p_num=42
then v_result:=trunc(to_date(p_yyyymmdd,'yyyy-mm-dd'),'q')-1; -- 上季末
elsif p_num=43
then v_result:=trunc(to_date(p_yyyymmdd,'yyyy-mm-dd'),'yyyy')-1; --上年末
else
raise_application_error(-20001,'p_num参数说明不存在!'); --其它参数抛出异常
end if;
return v_result; --返回结果
end func_date;
/
调用函数:
select func_date(20161219,11) from al;
追问先谢谢了,不过有些看不太懂,比如elsif的用法,我用的sqlserver,能改改吗
追答这个是Oracle的,SQLServer的没接触过