函数代码:
专注于为中小企业提供网站制作、成都做网站服务,电脑端+手机端+微信端的三站合一,更高效的管理,为中小企业山海关免费做网站提供优质的服务。我们立足成都,凝聚了一批互联网行业人才,有力地推动了成百上千家企业的稳健成长,帮助中小企业通过网站建设实现规模扩充和转变。
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;
把在5月有但6月没有的数据(条件是sDeptNum、sTypeNum相同)查出来,插入到表中即可,一条sql搞定
如:给定的年月格式为20157,代表2015年7月。
取某月第一天:
SELECT CAST((LEFT('20157',4)+'-'+SUBSTRING('20157',5,LEN('20157'))+'-'+'01') AS DATETIME)
结果:
要找出月初到月末的数据,那只要找出本月范围即可,SQL提供了DateDiff来解决这个问题:
DateDiff 函数:返回两个日期之间的时间间隔。
语法
DateDiff(interval, date1, date2 [,firstdayofweek[, firstweekofyear]])
示例如下:
select * from table where datediff(month,getdate(), date_colName)=0
如果当前日期getdate() 和表中的字段date_colName 相等,即为本月。
首先你得有字段记录时间,假设这个字段是datetime类型,名为[create_time];
然后,可以使用datepart函数来获取一个时间类型的年、月、日、时、分、秒的值;
最后,可以将hour:minute转换为一个带小数的类型来比较,例如numeric(4,2)。
select * from ...
where datepart(month,updtime)=4
and not datepart(hour,create_time) +convert(numeric(4,2),datepart(minute,create_time))/100 between 7.3 and 8.3
and not datepart(hour,create_time) +convert(numeric(4,2),datepart(minute,create_time))/100 between 12.3 and 12.3