Re: Uhrzeitenberechnung, rechnen und ausgeben von Variablen (PL/SQL)
geschrieben von:
christian_goto (---.dip0.t-ipconnect.de)
Datum:
moin,
ich mach das auch im package.hier mal diverse funktionen:
package:
----------
FUNCTION HHMI2Minuten(iHHMI IN VARCHAR2 DEFAULT NULL) RETURN NUMBER;
FUNCTION Minuten2HHMI(iMinuten IN PLS_INTEGER DEFAULT 0, i0alsNULL BOOLEAN DEFAULT FALSE) RETURN VARCHAR2;
FUNCTION Interval2HHMI(iVonDate DATE DEFAULT SYSDATE, iBisDate IN DATE DEFAULT SYSDATE) RETURN VARCHAR2;
FUNCTION InduZeit2MinutenNum(iInduZeit IN VARCHAR2 DEFAULT NULL) RETURN NUMBER;
FUNCTION Minuten2InduZeit(iMinuten IN PLS_INTEGER DEFAULT 0, i0alsNULL BOOLEAN DEFAULT FALSE) RETURN VARCHAR2;
FUNCTION Minuten2InduZeitNum(iMinuten IN PLS_INTEGER DEFAULT 0, i0alsNULL BOOLEAN DEFAULT FALSE) RETURN NUMBER;
package body:
-------------------------------------------------------------------------------------------
FUNCTION HHMI2Minuten(iHHMI IN VARCHAR2 DEFAULT NULL)
RETURN NUMBER
IS
vHHMI VARCHAR2(5) := NVL(iHHMI,'00:00');
BEGIN
RETURN 60*TO_NUMBER(SUBSTR(vHHMI,1,2))+TO_NUMBER(SUBSTR(vHHMI,4,2));
END HHMI2Minuten;
--------------------------------------------------------------------------------------------
FUNCTION Minuten2HHMI(iMinuten IN PLS_INTEGER DEFAULT 0, i0alsNULL BOOLEAN DEFAULT FALSE)
RETURN VARCHAR2
IS
vStunden PLS_INTEGER;
vMinuten PLS_INTEGER := iMinuten;
BEGIN
IF vMinuten=0 AND i0alsNULL THEN
RETURN NULL;
ELSE
vStunden := FLOOR(vMinuten/60);
vMinuten := vMinuten - vStunden*60;
RETURN TO_CHAR(vStunden,'FM09')||':'||TO_CHAR(vMinuten,'FM09');
END IF;
END Minuten2HHMI;
--------------------------------------------------------------------------------------------
FUNCTION Interval2HHMI(iVonDate DATE DEFAULT SYSDATE, iBisDate IN DATE DEFAULT SYSDATE)
RETURN VARCHAR2
IS
vStunden PLS_INTEGER;
vMinuten PLS_INTEGER;
BEGIN
vMinuten := (iBisDate - iVonDate)*24*60;
vStunden := FLOOR(vMinuten/60);
vMinuten := vMinuten - vStunden*60;
return TO_CHAR(vStunden,'FM09')||':'||TO_CHAR(vMinuten,'FM09');
END Interval2HHMI;
-------------------------------------------------------------------------------------------
FUNCTION InduZeit2MinutenNum(iInduZeit IN VARCHAR2 DEFAULT NULL)
RETURN NUMBER
IS
vInduZeit VARCHAR2(6) := NVL(iInduZeit,'00,00');
vNumber NUMBER;
vMinu PLS_INTEGER;
BEGIN
IF vInduZeit IS NULL OR vInduZeit IN ('00,00','0,00','0',',00',',0','0,','0,0') THEN
--vNumber := 0;
vMinu := 0;
ELSE
--vNumber := 60*TO_NUMBER(vInduZeit);
vNumber := ROUND(TO_NUMBER(vInduZeit),2);
vMinu := FLOOR(vNumber);
vNumber := vNumber-vMinu;
vMinu := 60*vMinu;
IF vNumber>0 THEN
qInitInduMinu;
vMinu := vMinu + qtIndu2Minu(vNumber*100);
END IF;
END IF;
--RETURN vNumber;
RETURN vMinu;
END InduZeit2MinutenNum;
---------------------------------------------------------------------------------------
FUNCTION Minuten2InduZeitNum(iMinuten IN PLS_INTEGER DEFAULT 0, i0alsNULL BOOLEAN DEFAULT FALSE)
RETURN NUMBER
IS
vStunden PLS_INTEGER;
vMinuten PLS_INTEGER := NVL(iMinuten,0);
BEGIN
IF vMinuten=0 AND i0alsNULL THEN
RETURN NULL;
ELSE
vStunden := FLOOR(vMinuten/60);
vMinuten := vMinuten - vStunden*60;
--return TO_CHAR(vStunden,'FM99')||','||TO_CHAR((vMinuten*5)/3.0,'FM09');
--InsProto(TO_CHAR(iMinuten)||':'||TO_CHAR(vMinuten));
qInitInduMinu;
RETURN (vStunden+qtMinu2Indu(vMinuten));
END IF;
END Minuten2InduZeitNum;
--------------------------------------------------------------------------------------
FUNCTION Minuten2InduZeit(iMinuten IN PLS_INTEGER DEFAULT 0, i0alsNULL BOOLEAN DEFAULT FALSE)
RETURN VARCHAR2
IS
BEGIN
IF iMinuten=0 AND i0alsNULL THEN
RETURN NULL;
ELSE
RETURN TO_CHAR(Minuten2InduZeitNum(iMinuten,i0alsNULL),'FM90D00');
END IF;
END Minuten2InduZeit;
--------------------------------------------------------------------------------------
g/c
1 mal bearbeitet. Zuletzt am .