|
|
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
|
|
| |
|