programmera.net -> oracle -> normal     för utskrift      info@programmera.net

Numeriska funktioner i Oracle

  Kommando    Exempel  Beskrivning
  TO_CHAR  TO_CHAR(-5,'999')  Omvandlar ett tal till en sträng enligt givet format.
  TO_NUMBER  TO_NUMBER('-5')  Förvandlar en sträng till ett tal.
  SIGN  SIGN(-5)  Returnerar -1 om talet är negativt, 1 om talet är positivt och 0 om talet är 0.
  CEIL  CEIL(1.234)  Avrundar talet uppåt.
  FLOOR  FLOOR(1.234)  Avrundar talet nedåt.
  ROUND  ROUND(1.339,2)  Avrundar till 1.34.
  TRUNC  TRUNC(1.339,2)  Klipper talet till 1.33.
  MOD  MOD(123,7)  Tar modulus 7 på talet 123.
  POWER  POWER(14,2)  Beräknar 14 upphöjt till 2.
  LOG  LOG(14,196)  Logaritm. Returnerar det nummer som 14 måste höjjas upp till för att bli 196.
  EXP  EXP(2)  Upphöjjer talet e till 2.
  LN  LN(7.3890561)  Beräknar vilket tal e ska upphöjjas till för att bli 7.3890561.

TO_CHAR

Med TO_CHAR(num, format) kan man omvandla num till en sträng enligt format.
SQL> SELECT to_char(-5, '999') as int, length(to_char(-5, '999')) as len  FROM dual;

INT         LEN
---- ----------
  -5          4

I tabellen nedan ges exempel på olika format:

Format Beskrivning
99999  Ett heltal med maxlängd 5.
99999.90  Ett tal med exakt två decimaler.
99990.90  Om talet är mindre än 1 inleds talet med en nolla.
09999.90  Inledande nollor i mån av plats.
B9999  Ta bort ev. inledande nollor.
S9999  Inledande tecken (+/-).
$999,999.90  
XXXX  Hexadecimal konvertering.

Om talet inte får plats i det av format angivna utrymmet returneras #####. Vi ger några exempel på TO_CHAR():
SQL> SELECT 
	TO_CHAR(123, '99999') as c1
	,TO_CHAR(1234567.123, '99999') as c1a
	,TO_CHAR(123, '99999.90') as c2
	,TO_CHAR(123, '9990.90') as c3
	,TO_CHAR(123, '09999.90') as c4
	,TO_CHAR(00123, 'B9999') as c5
	,TO_CHAR(123, 'S9999') as c6
	,TO_CHAR(123456, '$999,999.90') as c7
	,TO_CHAR(123, 'XXX') as c8
FROM dual;

C1     C1A    C2        C3       C4        C5    C6    C7           C8
------ ------ --------- -------- --------- ----- ----- ------------ ----
   123 ######    123.00   123.00  00123.00   123  +123  $123,456.00   7B


TO_NUMBER

TO_NUMBER(str,format) förvandlar en sträng till ett tal enligt givet format.
SQL> SELECT TO_NUMBER('-5') as n1
	,TO_NUMBER('0012.10','0999.90') as n2 
	,TO_NUMBER('012.1','9999') as n3 
	FROM dual;

        N1         N2         N3
---------- ---------- ----------
        -5       12,1        121

Vi ser att det sista resultatet blev litet oväntat. Problemet är att inget decimaltecken angavs i formatet. Om formatet inte har tillräckligt med siffror får vi ett fel:
SQL> SELECT TO_NUMBER('12.1','99') as n1 FROM dual;
SELECT TO_NUMBER('12.1','99') as n1 FROM dual
                 *
Fel på rad 1:
ORA-01722: ogiltigt tal


SIGN

SIGN(n) returnerar -1 om n är negativt och 1 om n är positivt och 0 om talet är 0:
SQL> SELECT sign(-5), sign(3), sign(0) FROM dual;

  SIGN(-5)    SIGN(3)    SIGN(0)
---------- ---------- ----------
        -1          1          0


CEIL

CIEL(n) avrundar n uppåt:
SQL> SELECT ceil(1.234), ceil(-1.234) FROM dual;

CEIL(1.234) CEIL(-1.234)
----------- ------------
          2           -1


FLOOR

FLOOR(n) avrundar talet n nedåt:
SQL> SELECT floor(1.234), floor(-1.234) FROM dual;

FLOOR(1.234) FLOOR(-1.234)
------------ -------------
           1            -2


ROUND

Med ROUND avrundas ett tal:
SQL> SELECT round(1.2345,2), round(1.2345) FROM dual;
	
ROUND(1.2345,2) ROUND(1.2345)
--------------- -------------
           1.23             1


TRUNC

Med TRUNC klipps ett tal:
SQL> SELECT trunc(1.339,2), trunc(1.339) FROM dual;

TRUNC(1.339,2) TRUNC(1.339)
-------------- ------------
          1.33            1


MOD

MOD(n,m) tar modulus m på talet n:
SQL> SELECT mod(123,7) FROM dual;

MOD(123,7)
----------
         4


POWER

Med POWER(n,m) kan man beräkna n upphöjt till m:
SQL> SELECT power(14,2) FROM dual;

POWER(14,2)
-----------
        196


LOG

LOG(b,n) tar logaritmen på n med basen b:
SQL> SELECT log(14,196) FROM dual;

LOG(14,196)
-----------
          2


EXP

EXP(n) beräknar e upphöjt till n:
SQL> SELECT exp(2) FROM dual;

    EXP(2)
----------
 7.3890561


LN

LN(n) står för den naturliga logaritmen. Vilket tal ska e upphöjjas till för att bli n:
SQL> SELECT ln(7.3890561) FROM dual;

LN(7.3890561)
-------------
            2