Create Or Replace Function Get_Strarraylength
(
Str1 In Varchar2,--要分割的字符串
Split In Varchar2 --分隔符号
) Return Number Is --返回Number类型
Location Number;
Startstr Number;
Length Number;
str Varchar2(1024);
Begin
Str := Ltrim(Rtrim(Str1));
Location := Instr(Str, Split);
Length := 1;
While Location <> 0 Loop
Startstr := Location + 1;
Location := Instr(Str, Split, Startstr);
Length := Length + 1;
End Loop;
Return(Length);
End Get_Strarraylength;
-----------测试-----------------------------------------
Declare
Str Varchar2(20);
Split Varchar2(10);
Startstr Number;
Length Number;
Location Number;
nextstr Number;
seed Number;
indexstr Number;
Begin
Str := 'aaaaa|aaa|a';
Split := '|';
startstr:=1;
nextstr:=1;
seed:=length(split);
Location := Instr(Str, Split); --charindex
While Location <> 0 Loop
Startstr := Location + 1;
Location := Instr(Str, Split, Startstr);
Length := Length + 1;
End Loop;
Dbms_Output.Put_Line(Length);
End;
-----------------------------------------------------
Create Or Replace Function Get_StrArrayStrOfIndex
(
Str1 In Varchar2,--要分割的字符串
Split In Varchar2,--分隔符号
Indexstr In Number --取第几个元素
) Return Varchar2 Is
str Varchar(1024);
Startstr Number;
Location Number;
Nextstr Number;
Seed Number;
Begin
Str := Ltrim(Rtrim(Str1));
Startstr := 1;
Nextstr := 1;
Seed := Length(Split);
Location := Instr(Str, Split); --charindex
While Location <> 0 And Indexstr > Nextstr Loop
Startstr := Location + Seed;
Location := Instr(Str, Split, Startstr);
Nextstr := Nextstr + 1;
End Loop;
If Location = 0 Then
Location := Length(Str) + 1;
End If;
Return(Substr(Str, Startstr, Location - Startstr));
End;
--------------------test-------------------------------------
Declare
intyear Number;
intmonth Number;
period_id Number;
strType Number;
strTime Varchar2(20);
ostrTag Number;
peak Varchar2(100);
middle Varchar2(100);
valley Varchar2(100);
peak1 Varchar2(20);
middle1 Varchar2(20);
valley1 Varchar2(20);
nextstr Number;
hour Number;
mint Number;
Year_ Char(4);
Month_ Char(2);
fullminit Varchar2(2);
Begin
intyear:=2006;
intmonth:=12;
period_id:=95;
strType:=30;
hour:=trunc((period_id*15)/60);
mint:=(period_id*15) Mod 60;
fullminit:=to_char(mint);
If mint<10 Then
fullminit:='0'||fullminit;
End If;
dbms_output.put_line(fullminit);--
strTime:=to_char(hour)||':'||fullminit;
dbms_output.put_line(strTime);--
year_:=to_char(intyear);
month_:=to_char(intmonth);
ostrTag:=0;
Select SYS_PERIOD_PEAK,SYS_PERIOD_MID,SYS_PERIOD_VAL Into peak,middle,valley
From GBOSS.SYS_PERIOD_TYPE Where SYS_APP_ID=strType and year=year_ and month=month_;
peak:=replace(RTRIM(LTRIM(peak)),':','');
middle:=replace(RTRIM(LTRIM(middle)),':','');
valley:=replace(RTRIM(LTRIM(valley)),':','');
strTime:=replace(RTRIM(LTRIM(strTime)),':','');
dbms_output.put_line(peak||','||strTime);----
--处理Peak
nextstr:=1;
While nextstr<=Get_StrArrayLength(peak,'|') Loop
peak1:=Get_StrArrayStrOfIndex(peak,'|',nextstr);
If substr(peak1,1,1)='[' And substr(peak1,length(peak1),1)=']' Then
If to_number(strtime)>=to_number(substr(peak1,2,instr(peak1,'-')-2)) And
to_number(strtime)<=to_number(substr(peak1,instr(peak1,'-')+1,length(peak1)-instr(peak1,'-')-1)) Then
ostrtag:=1;
End If;
End If;
If substr(peak1,1,1)='[' And substr(peak1,length(peak1),1)=')' Then
If to_number(strtime)>=to_number(substr(peak1,2,instr(peak1,'-')-2)) And
to_number(strtime)<to_number(substr(peak1,instr(peak1,'-')+1,length(peak1)-instr(peak1,'-')-1)) Then
ostrtag:=1;
End If;
End If;
If substr(peak1,1,1)='(' And substr(peak1,length(peak1),1)=']' Then
If to_number(strtime)>to_number(substr(peak1,2,instr(peak1,'-')-2)) And
to_number(strtime)<=to_number(substr(peak1,instr(peak1,'-')+1,length(peak1)-instr(peak1,'-')-1)) Then
ostrtag:=1;
End If;
End If;
If substr(peak1,1,1)='(' And substr(peak1,length(peak1),1)=')' Then
If to_number(strtime)>to_number(substr(peak1,2,instr(peak1,'-')-2)) And
to_number(strtime)<to_number(substr(peak1,instr(peak1,'-')+1,length(peak1)-instr(peak1,'-')-1)) Then
ostrtag:=1;
End If;
End If;
nextstr:=nextstr+1;
End Loop;
--处理middle
nextstr:=1;
While ostrtag=0 And nextstr<=Get_StrArrayLength(middle,'|') Loop
middle1:=Get_StrArrayStrOfIndex(middle,'|',nextstr);
If substr(middle1,1,1)='[' And substr(middle1,length(middle1),1)=']' Then
If to_number(strtime)>=to_number(substr(middle1,2,instr(middle1,'-')-2)) And
to_number(strtime)<=to_number(substr(middle1,instr(middle1,'-')+1,length(middle1)-instr(middle1,'-')-1)) Then
ostrtag:=2;
End If;
End If;
If substr(middle1,1,1)='[' And substr(middle1,length(middle1),1)=')' Then
If to_number(strtime)>=to_number(substr(middle1,2,instr(middle1,'-')-2)) And
to_number(strtime)<to_number(substr(middle1,instr(middle1,'-')+1,length(middle1)-instr(middle1,'-')-1)) Then
ostrtag:=2;
End If;
End If;
If substr(middle1,1,1)='(' And substr(middle1,length(middle1),1)=']' Then
If to_number(strtime)>to_number(substr(middle1,2,instr(middle1,'-')-2)) And
to_number(strtime)<=to_number(substr(middle1,instr(middle1,'-')+1,length(middle1)-instr(middle1,'-')-1)) Then
ostrtag:=2;
End If;
End If;
If substr(middle1,1,1)='(' And substr(middle1,length(middle1),1)=')' Then
If to_number(strtime)>to_number(substr(middle1,2,instr(middle1,'-')-2)) And
to_number(strtime)<to_number(substr(middle1,instr(middle1,'-')+1,length(middle1)-instr(middle1,'-')-1)) Then
ostrtag:=2;
End If;
End If;
nextstr:=nextstr+1;
End Loop;
--处理valley
nextstr:=1;
While ostrtag=0 And nextstr<=Get_StrArrayLength(valley,'|') Loop
valley1:=Get_StrArrayStrOfIndex(valley,'|',nextstr);
If substr(valley1,1,1)='[' And substr(valley1,length(valley1),1)=']' Then
If to_number(strtime)>=to_number(substr(valley1,2,instr(valley1,'-')-2)) And
to_number(strtime)<=to_number(substr(valley1,instr(valley1,'-')+1,length(valley1)-instr(valley1,'-')-1)) Then
ostrtag:=3;
End If;
End If;
If substr(valley1,1,1)='[' And substr(valley1,length(valley1),1)=')' Then
If to_number(strtime)>=to_number(substr(valley1,2,instr(valley1,'-')-2)) And
to_number(strtime)<to_number(substr(valley1,instr(valley1,'-')+1,length(valley1)-instr(valley1,'-')-1)) Then
ostrtag:=3;
End If;
End If;
If substr(valley1,1,1)='(' And substr(valley1,length(valley1),1)=']' Then
If to_number(strtime)>to_number(substr(valley1,2,instr(valley1,'-')-2)) And
to_number(strtime)<=to_number(substr(valley1,instr(valley1,'-')+1,length(valley1)-instr(valley1,'-')-1)) Then
ostrtag:=3;
End If;
End If;
If substr(valley1,1,1)='(' And substr(valley1,length(valley1),1)=')' Then
If to_number(strtime)>to_number(substr(valley1,2,instr(valley1,'-')-2)) And
to_number(strtime)<to_number(substr(valley1,instr(valley1,'-')+1,length(valley1)-instr(valley1,'-')-1)) Then
ostrtag:=3;
End If;
End If;
nextstr:=nextstr+1;
End Loop;
dbms_output.put_line(ostrtag);
End;
-------------------------------------------------------------------
Create Or Replace Function Procgettagf
(
Intyear In Number,--年
Intmonth In Number,--月
Period_Id In Number,--时间段
Strtype In Number--应用类型
) Return Number Is
Strtime Varchar2(20);
Ostrtag Number;
Peak Varchar2(100);
Middle Varchar2(100);
Valley Varchar2(100);
Peak1 Varchar2(20);
Middle1 Varchar2(20);
Valley1 Varchar2(20);
Nextstr Number;
Hour Number;
Mint Number;
Year_ Char(4);
Month_ Char(2);
Fullminit Varchar2(2);
Begin
--intyear:=2006;
--intmonth:=12;
--period_id:=95;
--strType:=30;
Hour := Trunc((Period_Id * 15) / 60);
Mint := (Period_Id * 15) Mod 60;
Fullminit := To_Char(Mint);
If Mint < 10 Then
Fullminit := '0' || Fullminit;
End If;
Dbms_Output.Put_Line(Fullminit); --
Strtime := To_Char(Hour) || ':' || Fullminit;
Dbms_Output.Put_Line(Strtime); --
Year_ := To_Char(Intyear);
Month_ := To_Char(Intmonth);
Ostrtag := 0;
Select Sys_Period_Peak, Sys_Period_Mid, Sys_Period_Val
Into Peak, Middle, Valley
From Gboss.Sys_Period_Type
Where Sys_App_Id = Strtype And Year = Year_ And Month = Month_;
Peak := Replace(Rtrim(Ltrim(Peak)), ':', '');
Middle := Replace(Rtrim(Ltrim(Middle)), ':', '');
Valley := Replace(Rtrim(Ltrim(Valley)), ':', '');
Strtime := Replace(Rtrim(Ltrim(Strtime)), ':', '');
Dbms_Output.Put_Line(Peak || ',' || Strtime); ----
--处理Peak
Nextstr := 1;
While Nextstr <= Get_Strarraylength(Peak, '|') Loop
Peak1 := Get_Strarraystrofindex(Peak, '|', Nextstr);
If Substr(Peak1, 1, 1) = '[' And Substr(Peak1, Length(Peak1), 1) = ']' Then
If To_Number(Strtime) >= To_Number(Substr(Peak1, 2, Instr(Peak1, '-') - 2)) And
To_Number(Strtime) <= To_Number(Substr(Peak1, Instr(Peak1, '-') + 1, Length(Peak1) - Instr(Peak1, '-') - 1)) Then
Ostrtag := 1;
End If;
End If;
If Substr(Peak1, 1, 1) = '[' And Substr(Peak1, Length(Peak1), 1) = ')' Then
If To_Number(Strtime) >= To_Number(Substr(Peak1, 2, Instr(Peak1, '-') - 2)) And
To_Number(Strtime) < To_Number(Substr(Peak1, Instr(Peak1, '-') + 1, Length(Peak1) - Instr(Peak1, '-') - 1)) Then
Ostrtag := 1;
End If;
End If;
If Substr(Peak1, 1, 1) = '(' And Substr(Peak1, Length(Peak1), 1) = ']' Then
If To_Number(Strtime) > To_Number(Substr(Peak1, 2, Instr(Peak1, '-') - 2)) And
To_Number(Strtime) <= To_Number(Substr(Peak1, Instr(Peak1, '-') + 1, Length(Peak1) - Instr(Peak1, '-') - 1)) Then
Ostrtag := 1;
End If;
End If;
If Substr(Peak1, 1, 1) = '(' And Substr(Peak1, Length(Peak1), 1) = ')' Then
If To_Number(Strtime) > To_Number(Substr(Peak1, 2, Instr(Peak1, '-') - 2)) And
To_Number(Strtime) < To_Number(Substr(Peak1, Instr(Peak1, '-') + 1, Length(Peak1) - Instr(Peak1, '-') - 1)) Then
Ostrtag := 1;
End If;
End If;
Nextstr := Nextstr + 1;
End Loop;
--处理middle
Nextstr := 1;
While Ostrtag = 0 And Nextstr <= Get_Strarraylength(Middle, '|') Loop
Middle1 := Get_Strarraystrofindex(Middle, '|', Nextstr);
If Substr(Middle1, 1, 1) = '[' And Substr(Middle1, Length(Middle1), 1) = ']' Then
If To_Number(Strtime) >= To_Number(Substr(Middle1, 2, Instr(Middle1, '-') - 2)) And
To_Number(Strtime) <=
To_Number(Substr(Middle1, Instr(Middle1, '-') + 1, Length(Middle1) - Instr(Middle1, '-') - 1)) Then
Ostrtag := 2;
End If;
End If;
If Substr(Middle1, 1, 1) = '[' And Substr(Middle1, Length(Middle1), 1) = ')' Then
If To_Number(Strtime) >= To_Number(Substr(Middle1, 2, Instr(Middle1, '-') - 2)) And
To_Number(Strtime) <
To_Number(Substr(Middle1, Instr(Middle1, '-') + 1, Length(Middle1) - Instr(Middle1, '-') - 1)) Then
Ostrtag := 2;
End If;
End If;
If Substr(Middle1, 1, 1) = '(' And Substr(Middle1, Length(Middle1), 1) = ']' Then
If To_Number(Strtime) > To_Number(Substr(Middle1, 2, Instr(Middle1, '-') - 2)) And
To_Number(Strtime) <=
To_Number(Substr(Middle1, Instr(Middle1, '-') + 1, Length(Middle1) - Instr(Middle1, '-') - 1)) Then
Ostrtag := 2;
End If;
End If;
If Substr(Middle1, 1, 1) = '(' And Substr(Middle1, Length(Middle1), 1) = ')' Then
If To_Number(Strtime) > To_Number(Substr(Middle1, 2, Instr(Middle1, '-') - 2)) And
To_Number(Strtime) <
To_Number(Substr(Middle1, Instr(Middle1, '-') + 1, Length(Middle1) - Instr(Middle1, '-') - 1)) Then
Ostrtag := 2;
End If;
End If;
Nextstr := Nextstr + 1;
End Loop;
--处理valley
Nextstr := 1;
While Ostrtag = 0 And Nextstr <= Get_Strarraylength(Valley, '|') Loop
Valley1 := Get_Strarraystrofindex(Valley, '|', Nextstr);
If Substr(Valley1, 1, 1) = '[' And Substr(Valley1, Length(Valley1), 1) = ']' Then
If To_Number(Strtime) >= To_Number(Substr(Valley1, 2, Instr(Valley1, '-') - 2)) And
To_Number(Strtime) <=
To_Number(Substr(Valley1, Instr(Valley1, '-') + 1, Length(Valley1) - Instr(Valley1, '-') - 1)) Then
Ostrtag := 3;
End If;
End If;
If Substr(Valley1, 1, 1) = '[' And Substr(Valley1, Length(Valley1), 1) = ')' Then
If To_Number(Strtime) >= To_Number(Substr(Valley1, 2, Instr(Valley1, '-') - 2)) And
To_Number(Strtime) <
To_Number(Substr(Valley1, Instr(Valley1, '-') + 1, Length(Valley1) - Instr(Valley1, '-') - 1)) Then
Ostrtag := 3;
End If;
End If;
If Substr(Valley1, 1, 1) = '(' And Substr(Valley1, Length(Valley1), 1) = ']' Then
If To_Number(Strtime) > To_Number(Substr(Valley1, 2, Instr(Valley1, '-') - 2)) And
To_Number(Strtime) <=
To_Number(Substr(Valley1, Instr(Valley1, '-') + 1, Length(Valley1) - Instr(Valley1, '-') - 1)) Then
Ostrtag := 3;
End If;
End If;
If Substr(Valley1, 1, 1) = '(' And Substr(Valley1, Length(Valley1), 1) = ')' Then
If To_Number(Strtime) > To_Number(Substr(Valley1, 2, Instr(Valley1, '-') - 2)) And
To_Number(Strtime) <
To_Number(Substr(Valley1, Instr(Valley1, '-') + 1, Length(Valley1) - Instr(Valley1, '-') - 1)) Then
Ostrtag := 3;
End If;
End If;
Nextstr := Nextstr + 1;
End Loop;
Dbms_Output.Put_Line(Ostrtag);
Return(Ostrtag);
End;
分享到:
相关推荐
峰谷时段划分对含电动汽车配电系统负荷曲线的影响.pdf
精准峰谷线公式.pdf
通达信指标公式源码 峰谷拉升力副图指标.doc
为了使储能系统达到最优的削峰填谷效果,提出一种计及负荷峰谷特性的储能调峰日前优化调度策略。根据调度日内的负荷曲线,以储能系统的额定容量与额定功率为约束条件,分别计算在调峰过程中所能达到的最高填谷功率线...
自动寻峰谷算法matlab实现,非常不错,大师实现
通达信指标公式源码峰谷买卖指标.doc
图像分分割迭代、峰谷、半阈值算法的的vc代码
电子政务-家用智能峰谷电转换装置.zip
通达信指标公式源码 黄金量柱+峰谷线+猎击线.doc
本程序复现自:《基于峰谷分时电价引导下的电动汽车充电负荷优化_欧名勇》 在研究电动汽车用户充电需求的前提下,利用蒙特卡洛方法对2种不同充电方式进行模拟 并对其进行分析;分析用户响应度对电动汽车有序充电的...
该方法是在私家电动汽车出行规律和普通居民小区生活用电规律的基础上,基于峰谷分时电价,最大限度利用谷时段进行充电的有序充电控制方法。采用序贯蒙特卡洛仿真对某居民小区电动汽车充电进行验证,结果证明了所提...
水泥厂峰谷用电管理规定.pdf
峰谷撑压主图+选股源码通达信指标公式源码.doc
通达信指标公式源码 峰谷价势 WR-KDJ组合指标.doc
MATLAB代码:峰谷电价引导下电动汽车充电负荷优化-基于NSGA-II 关键词:电动汽车 充电负荷 NSGA-II算法 峰谷电价 仿真平台:MATLAB 主要内容:代码主要做的是基于NSGA-II的电动汽车充电负荷优化,首先,在研究电动...
电气设备行业点评报告:峰谷电价差拉大,储能发展未来可期.pdf
峰谷用电定时器.zip
结合峰谷电价与阶梯电价思想,提出分时阶梯电价策略。将不同时段不同价格梯段所对应的电量视?煌
怎么看智能电表峰谷平度数?全文共6页,当前为第1页。怎么看智能电表峰谷平度数?全文共6页,当前为第1页。怎么看智能电表峰谷平度数? 怎么看智能电表峰谷平度数?全文共6页,当前为第1页。 怎么看智能电表峰谷平...
提高风电消纳能力的高载能用户峰谷分时电价研究,崔强,王秀丽,提出一种通过需求侧管理(demand side management,DSM),激励负荷侧的高载能企业参与调峰,提高系统风电消纳能力的峰谷分时电价机制。�