Funkcje numeryczne
ROUND (x,[,y])
Zaokrągla X do Y miejsca po przecinku. Jeśli Y nie zostało podane jest domyślnie ustawiane jako 0.
TRUNC (x,[,y])
Ucina X do Y miejsca po przecinku. Jeśli Y nie zostało podane jest domyślnie ustawiane jako 0.
POWER (x,y)
Podnosi X do potęgi Y
SQRT(x)
Pierwiastek kwadratowy z X.
SIGN(x)
Zwraca wartość 0,1 lub -1 w zależności od znaku liczby X
ABS(x)
Wartość bezwzględna liczby X.
MOD(x,y)
Reszta z dzielenia X przez Y. Jeśli Y = 0 zwraca X
SIN(x), COS(x), TAN(x)
Funkcje trygonometryczne. X podawane w radianach.
Ćwiczenia
- Wyświetl nazwisko oraz miesięcznie wynagrodzenie pracownika z dokładnością do 4 miejsca po przecinku
- Wyświetl wynagrodzenie pracowników do kwadratu (tak, właśnie tyle zarabia prezes :) )
- Wyświetl wynagrodzenie pracowników zaokrąglone oraz ucięte do tysięcy.
Ten temat omawiam na poniższych szkoleniach:
• Podstawy Oracle SQL
• Podstawy SQL i PL/SQL
Możesz w nich uczestniczyć, a jako czytelnik tego bloga otrzymasz 10% zniżki - poinformuj o tym fakcie konsultanta.
select job_title, job_id, round((min_salary/12),3), trunc((min_salary/12),3) from jobs
OdpowiedzUsuńtak wygląda odpowiedź do ćwiczenia 3 ?
select last_name, round(to_char(salary, 99.999), 0)
OdpowiedzUsuńfrom employees;
tomz, nie możesz zaokrąglić char'a.
OdpowiedzUsuńJeśli chcesz użyć to_char, musisz zastosować funkcję znakową:
select rtrim(trunc((salary),-3),000) from employees;
Panowie, przyjrzałem się uważnie Waszym propozycjom i muszę przyznać, że nie wydają mi się zadowalające, gdyż dają bądź błędne wyniki, bądź występują tam pozycje null'owe. Oto moja propozycja:
OdpowiedzUsuńSELECT last_name, ROUND(salary/1000, 0) zaokraglone, TRUNC(salary/1000, 0) uciete FROM employees;
Według mnie w trzecim ćwiczeniu chodzi o takie rozwiązanie:
UsuńSELECT last_name, ROUND(salary,-3) as "Zaokraglone", TRUNC(salary,-3) as "Uciete" from employees;
Nie wiem dlaczego dzielisz przez 1000, dla mnie zaokrąglenie (Z) oraz ucięcie (U) do tysięcy dla przykładowych (P) liczb powinno wyglądać następująco:
1.
P: 9400
Z: 9000
U: 9000
2.
P: 9600
Z: 10000
U: 9000
3.
P: 9999
Z: 10000
U: 9000
4.
P: 400
Z: 0
U: 0
Autor powinien moim zdaniem dopisać, że przy funkcjach ROUND(x,[y]) oraz TRUNC(x,[y]) podanie y ujemnego oznacza zaokrąglanie/ucinanie do miejsca y po lewej od przecinka.
moim zdaniem o to chodzilo autorowi, tak czy siak round i trunc maja ujemne parametry y, ktore bardzo czesto sie stosuje.
Usuńselect last_name, round(trunc(salary),4)
OdpowiedzUsuńfrom employees;
Moja logika :P
w/g mnie powinno być tak:
OdpowiedzUsuńselect last_name, trunc(round((salary/12),-3),-3) wypalata_mies from employees;
Dla tych, którzy chcą sprawdzić rozwiązania zadań 1 oraz 2:
OdpowiedzUsuń1. Select last_name nazwisko, round(salary/12, 4) zaokrag_miesiecz_wynagrodzenie from employees
2. Select power(salary/12,2) mies_wynagr_do_kwadratu from employees
Nie wiem dlaczego w zad. 1 każdy chce zaokrąglać...polecenie jest następujące:
OdpowiedzUsuń"Wyświetl nazwisko oraz miesięcznie wynagrodzenie pracownika z dokładnością do 4 miejsca po przecinku". Nie ma tu mowy o zaokrąglaniu do 4 miejsc po przecinku...
Zatem:
select last_name, trunc(salary/12,4)
from employees;
Jeśli mamy tylko zaokrąglić a nie po prostu uciąć wartości po 4 miejscach po przecinku to wyszło mi tak jak Relatywiście:
OdpowiedzUsuńselect last_name, round(salary/12, 4) as "miesieczna pensja"
from employees;
Przede wszystkim uwaga do kolumny "Salary". Komentarz na kolumnie SALARY w tabeli EMPLOYEES mówi jednoznacznie, że kolumna przechowuje MIESIĘCZNE wynagrodzenie pracownika ("Monthly salary of the employee. Must be greater
OdpowiedzUsuńthan zero (enforced by constraint emp_salary_min)". Więc jakiekolwiek dzielenie przez 12 jest błędne.