1.你可以直接在程序中拼SQL语句出来就行了,例如VB是这样的:
sql="select BOUND,.T_SVC,POR_TERR,POR_REGNCD,FND_REGNCD,TEU,(TEU/" & i_week & ")TEUWK FROM MASTER_AUT"
2.SQL不支持带参数的视图,你可以用存储过程或者自定义函数来实现,比如用自定义函数的方法:
create function f_qry(@week int) returns table
as
return(
select BOUND,T_SVC,POR_TERR,POR_REGNCD,FND_REGNCD,TEU,(TEU/@week) TEUWK
FROM MASTER_AUT
)以后就可以用这样的语句调用: select * from f_qry(4)
sql="select BOUND,.T_SVC,POR_TERR,POR_REGNCD,FND_REGNCD,TEU,(TEU/" & i_week & ")TEUWK FROM MASTER_AUT"
2.SQL不支持带参数的视图,你可以用存储过程或者自定义函数来实现,比如用自定义函数的方法:
create function f_qry(@week int) returns table
as
return(
select BOUND,T_SVC,POR_TERR,POR_REGNCD,FND_REGNCD,TEU,(TEU/@week) TEUWK
FROM MASTER_AUT
)以后就可以用这样的语句调用: select * from f_qry(4)
第一:要先叛断用户输入的年月(比如:200409) 有四个星期,那么把4传入@WEEK中.进行计算.
第二:要叛断闰年与否.因为闰有53个星期.
(case when 条件 then 值 end)case when 闰年 then '53个星期' end
else 4
end
'cast when then
end'
exec 'sql'
闰年是不是多了一个星期.那么把多的星期加在12月中.
and cast(left(@v,4) as int) % 100<>0 )
or cast(left(@v,4) as int) % 400=0
) and right(@v,2)='12' then 5
else 4
end
set @年月=200407select 星期数=datediff(week
,cast(@年月 as varchar)+'01'
,dateadd(month,1,cast(@年月 as varchar)+'01')-1)+1
这样得到的是该月的周数,基本上都是4。
create or replace procedure p_testliu
(d_dayin in date,
d_dayout out date,
n_day out number)
as
n_int number :=0;
n_month number;
d_day date;
begin
d_day:= last_day(add_months(d_dayin,-1));
loop
n_month:=months_between(next_day(d_day,'星期日'),last_day(add_months(d_dayin,-1))-1);
exit when n_month>1;
d_day:=next_day(d_day,'星期日');
n_int:=n_int+1;
end loop;
d_dayout:=d_day;
n_day:=n_int;
end;