十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
函数代码:
创新互联公司专业为企业提供梅列网站建设、梅列做网站、梅列网站设计、梅列网站制作等企业网站建设、网页设计与制作、梅列企业网站模板建站服务,十载梅列做网站经验,不只是建网站,更提供有价值的思路和整体网络服务。
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 dual;
-- 输入201401
-- 月初时间
select dateadd(day, datediff(day, 0,convert(datetime,'201401'+'01',112)), 0)
-- 月末时间
select dateadd(ss,-1,dateadd(month, datediff(month, -1,convert(datetime,'201401'+'01',112)), 0))
-- 输入2014
-- 年初时间
select dateadd(year, datediff(year, 0,convert(datetime,'2014'+'0101',112)), 0)
-- 年末时间
select dateadd(ss,-1,dateadd(year, datediff(year, 0,convert(datetime,'2014'+'0101',112)), 0))
要找出月初到月末的数据,那只要找出本月范围即可,SQL提供了DateDiff来解决这个问题:
DateDiff 函数:返回两个日期之间的时间间隔。
语法
DateDiff(interval, date1, date2 [,firstdayofweek[, firstweekofyear]])
示例如下:
select * from table where datediff(month,getdate(), date_colName)=0
如果当前日期getdate() 和表中的字段date_colName 相等,即为本月。