Oracle Numeric Functions
Version 10.1
ABS
Returns the absolute value of a number ABS(<value>)
SELECT ABS(-100) FROM dual;
ACOS
Returns the arc cosine of a number ACOS(<value>)
SELECT ACOS(0.5) ARC_COSINE
FROM dual;
ASIN
Returns the arc sin of a number ASIN(<value>)
SELECT ASIN(0.5) ARC_SINE
FROM dual;
ATAN
Returns the arc tanget of a number ATAN(<value>)
SELECT ATAN(0.5) ARC_TANGENT
FROM dual;
ATAN2
Arc tanget of the first value divided by the arc tangent of the second ATAN2(<value>, <value>)
SELECT ATAN2(0.5, 0.4) ARC_TANGET_DIV
FROM dual;
AVG
Returns the average of a column of numbers AVG(<value>)
SELECT AVG(initial_extent) FROM user_tables;
SELECT AVG(DISTINCT initial_extent) FROM user_tables;
BIN_TO_NUM
Converts a bit vector to a number BIN_TO_NUM(<value>,<value>,....)
SELECT BIN_TO_NUM(1, 0, 1, 0) FROM dual;
CEIL
Smallest integer greater than or equal to a decimal value CEIL(<value>)
SELECT CEIL(12345.67)
FROM dual;
COALESCE
Returns the first non-null value COALESCE(<value>, <value>, ....)
CREATE TABLE test (
col1 NUMBER(3),
col2 NUMBER(3),
col3 NUMBER(3));
INSERT INTO test VALUES (1, NULL, NULL);
INSERT INTO test VALUES (NULL, 2, NULL);
INSERT INTO test VALUES (NULL, NULL, 3);
INSERT INTO test VALUES (1, NULL, 3);
INSERT INTO test VALUES (NULL, 2, 3);
SELECT * FROM test;
SELECT COALESCE(col1, col2, col3) FROM test;
CORR
Returns the coefficient of correlation of a set of number pairs
For information go to http://tahiti.oracle.com
CORR_K
Calculates the Pearson's correlation coefficient
For information go to http://tahiti.oracle.com
CORR_S
Calculates the Spearman's rho correlation coefficient
For information go to http://tahiti.oracle.com
COS
Returns the cosine of a number (an angle expressed in radians) COS(<value>)
SELECT COS(180*3.1415926/180) COSINE
FROM dual;
COSH
The hyperbolic cosine of a number COSH(<value>)
SELECT COSH(0) HYPERBOLIC_COS FROM dual;
COUNT
The number of rows returned by a query COUNT(<value>)
SELECT COUNT(*) FROM all_objects;
COVAR_POP
The population covariance of a set of number pairs COVAR_POP(<expression1>, <expression2>)
conn sh/sh
SELECT t.calendar_month_number,
COVAR_POP(s.amount_sold, s.amount_sold) AS CP,
COVAR_SAMP(s.amount_sold, s.amount_sold) AS CS
FROM sales s, times t
WHERE s.time_id = t.time_id
AND t.calendar_year = 1998
GROUP BY t.calendar_month_number;
COVAR_SAMP
The sample covariance of a set of number pairs COVAR_POP(<expression1>, <expression2>)
See COVAR_POP demo.
CUME_DIST
Returns the cumulative distribution of a value in a group of values CUME_DIST(<value>)
conn oe/oe
SELECT CUME_DIST(15500, .05) WITHIN GROUP
(ORDER BY salary, commission_pct) CUME_DIST_OF_15500
FROM employees;
DENSE_RANK
Computes the rank of a row in an ordered group of rows DENSE_RANK(<value>)
conn oe/oe
SELECT DENSE_RANK(15500, .05) WITHIN GROUP
(ORDER BY salary DESC, commission_pct) DENSE_RANK_OF_15500
FROM employees;
EXP
Returns e raised to to an exponential power EXP(<value>)
SELECT 2.71828183 * 2.71828183 FROM dual;
SELECT EXP(2) FROM dual;
SELECT 2.71828183 * 2.71828183 * 2.71828183 FROM dual;
SELECT EXP(3) FROM dual;
FIRST
Returns the row ranked first using DENSE_RANK conn oe/oe
SELECT department_id,
MIN(salary) KEEP (DENSE_RANK FIRST ORDER BY commission_pct) WORST,
MAX(salary) KEEP (DENSE_RANK LAST ORDER BY commission_pct)
BEST
FROM employees
GROUP BY department_id;
FLOOR
Returns the largest integer less than or equal to a decimal value FLOOR(<string_or_column>)
SELECT FLOOR(12345.67) FROM dual;
GREATEST
Returns the largest of multiple values GREATEST(<value>, <value>, .... )
SELECT GREATEST(9, 67.6, 10) FROM dual;
LAST
Returns the row ranked last using DENSE_RANK
See FIRST demo
LEAST
Returns the smallst of multiple values LEAST(<value>, <value>, ....)
SELECT LEAST(9, 67.6, 10) FROM dual;
LN
Returns the natural log of a number LN(<value>)
SELECT LN(2) NATURAL_LOG FROM dual;
LOG
Returns the logarithm, base m of n LOG(<m_value>,<n_value>)
SELECT LOG(10,100) FROM dual;
SELECT LOG(100,10) FROM dual;
MAX
Returns the maximum value returned by a query MAX(<column_name>)
SELECT MAX(initial_extent) FROM all_tables;
MEDIAN
Returns the middle value of a set MEDIAN(<column_name>)
SELECT MEDIAN(initial_extent) FROM all_tables;
MIN
Returns the minimum value returned by a query MIN(<column_name>)
SELECT MIN(initial_extent) FROM all_tables;
MOD
Returns the modulus of a number. Same as remainder except uses FLOOR MOD(<m_value>, <n_value>)
SELECT MOD(3, 2) FROM dual;
SELECT MOD(6, 2) FROM dual;
NANVL
Returns Alternate Number If The Value Is Not A Number NANVL(<value_evaluated>, <value_returned>)
CREATE TABLE fpd (
dec_num NUMBER(10,2),
bin_double BINARY_DOUBLE,
bin_float BINARY_FLOAT);
INSERT INTO fpd VALUES (0, 'NaN', 'NaN');
COMMIT;
SELECT * FROM fpd;
SELECT bin_double, NANVL(bin_double, 0)
FROM fpd;
SELECT bin_float, NANVL(bin_float, 0)
FROM fpd;
INSERT INTO fpd VALUES ('NaN', 'NaN', 'NaN');
COMMIT;
SELECT bin_float, NANVL(dec_number, 0)
FROM fpd;
NVL
Returns a Value if the Expression IS NULL NVL(<expression>, <return_value>)
set serveroutput on
DECLARE
i PLS_INTEGER;
BEGIN
SELECT NVL(i, 93)
INTO i
FROM dual;
dbms_output.put_line('i1: ' || i);
SELECT NVL(i, 39)
INTO i
FROM dual;
dbms_output.put_line('i2: ' || i);
END;
/
NVL2
Returns First Value if NULL, Second Value if NOT NULL. NVL2(<expression>, <return_if_value>, <return_if_not_null>)
CREATE TABLE ats (
category VARCHAR2(20),
outval NUMBER(3),
inval NUMBER(3));
INSERT INTO ats VALUES ('Groceries', 10, NULL);
INSERT INTO ats VALUES ('Payroll', NULL, 100);
INSERT INTO ats VALUES ('Groceries', 20, NULL);
INSERT INTO ats VALUES ('Payroll', NULL, 200);
INSERT INTO ats VALUES ('Groceries', 30, NULL);
SELECT * FROM ats;
SELECT category, SUM(NVL2(outval, -outval, inval)) NET
FROM ats
GROUP BY category;
PERCENT_RANK
Calculates for a row r and a sort specification, the rank of row r minus 1 divided by the number of rows in the aggregate group PERCENT_RANK(<expression>) WITHIN GROUP
(ORDER BY <expression> <ASC | DESC> NULLS <FIRST | LAST>)
conn oe/oe
SELECT PERCENT_RANK(15000, .05) WITHIN GROUP
(ORDER BY salary, commission_pct) "Percent-Rank"
FROM employees;
PERCENTILE_CONT
Takes a percentile value and a sort specification, and returns an interpolated value that would fall into that percentile value with respect to the sort specification PERCENTILE_CONT(<expression>) WITHIN GROUP
(ORDER BY <expression> <ASC | DESC> NULLS <FIRST | LAST>)
OVER (<query_partition_clause>);
conn oe/oe
SELECT department_id, PERCENTILE_CONT(0.5)
WITHIN GROUP (ORDER BY salary DESC) MEDIAN_CONT
FROM employees
GROUP BY department_id;
PERCENTILE_DISC
Takes a percentile value and a sort specification and returns an element from the set PERCENTILE_DISC(<expression>) WITHIN GROUP
(ORDER BY <expression> <ASC | DESC> NULLS <FIRST | LAST>)
OVER (<query_partition_clause>);
conn oe/oe
SELECT department_id, PERCENTILE_DISC(0.5)
WITHIN GROUP (ORDER BY salary DESC) MEDIAN_DISC
FROM employees
GROUP BY department_id;
POWER
Returns m_value raised to the n_value power POWER(<m_value>, <n_value>)
SELECT 2*2*2 FROM dual;
SELECT POWER(2,3) FROM dual;
RANK
Calculates the rank of a value in a group of values RANK(<column_name>) WITHIN GROUP
SELECT RANK(15500, .05) WITHIN GROUP
(ORDER BY salary, commission_pct) SAL_RANK
FROM employees;
REGR_ (Linear Regression) Functions
REGR_AVGX
For more information go to http://tahiti.oracle.com
SELECT s.channel_id,
REGR_SLOPE(s.quantity_sold, p.prod_list_price) SLOPE,
REGR_INTERCEPT(s.quantity_sold, p.prod_list_price) INTCPT,
REGR_R2(s.quantity_sold, p.prod_list_price) RSQR,
REGR_COUNT(s.quantity_sold, p.prod_list_price) COUNT,
REGR_AVGX(s.quantity_sold, p.prod_list_price) AVGLISTP,
REGR_AVGY(s.quantity_sold, p.prod_list_price) AVGQSOLD
FROM sales s, products p
WHERE s.prod_id=p.prod_id
AND p.prod_category='Women'
AND s.time_id=to_DATE('10-OCT-2000')
GROUP BY s.channel_id;
REGR_AVGY
REGR_COUNT
REGR_INTERCEPT
REGR_R2
REGR_SLOPE
REGR_SXX
REGR_SXY
REGR_SYY
REMAINDER
Returns the modulus of a number (the remainder from dividing m by n.
Same as mod except uses ROUND REMAINDER(<m_value>, <n_value>)
SELECT REMAINDER(2,3) FROM dual;
REVERSE
Reverses the bytes from which a number has been created REVERSE(<value>)
SELECT 123 FROM dual;
SELECT DUMP(123) FROM dual;
SELECT REVERSE(123) FROM dual;
SELECT DUMP(REVERSE(123)) FROM dual;
ROUND
Returns a value rounded to integer places ROUND(<value>, <integer>)
SELECT ROUND(3.1415926, 4) FROM dual;
SIGN
Returns the sign of a number SIGN(<value>)
SELECT SIGN(15) FROM dual;
SELECT SIGN(-5) FROM dual;
SIN
Returns the sine of a number SIN(<value>)
SELECT SIN(2) SINE FROM dual;
SINH
Returns the hyperbolic sine of a number SINH(<value>)
SELECT SINH(2) HYPERBOLIC_SINE FROM dual;
SQRT
Returns the square root of a number SQRT(<value>)
SELECT SQRT(2) FROM dual;
STATS_ (Statistical) Functions
STATS_BINOMIAL_TEST
For information go to http://tahiti.oracle.com
STATS_CROSSTAB
STATS_F_TEST
STATS_KS_TEST
STATS_MW_TEST
STATS_ONE_WAY_ANOVA
STATS_T_TEST
STATS_WSR_TEST
STDDEV_POP
STDDEV_SAMP
STATS_MODE
Returns the value that occurs with the greatest frequency STATS_MODE(<expression>)
conn oe/oe
SELECT department_id, STATS_MODE(salary)
FROM employees
GROUP BY department_id;
SELECT salary, COUNT(*)
FROM employees
WHERE department_id = 50
GROUP BY salary;
STDDEV
Sample standard deviation of an expression STDDEV(<expression>)
conn oe/oe
SELECT STDDEV(salary) DEVIATION
FROM employees;
SUM
Computes the sum of an expression SUM(<column_name>)
SELECT SUM(initial_extent) FROM all_tables;
SELECT SUM(DISTINCT initial_extent) FROM all_tables;
TAN
Tangent in radians TAN(<value>)
SELECT TAN(135 * 3.14159265359/180) FROM dual;
TANH
Hyperbolic tangent TANH(<value>)
SELECT TANH(135 * 3.14159265359/180) FROM dual;
TO_BINARY_DOUBLE
Converts a Value to the BINARY_DOUBLE Data Type TO_BINARY_DOUBLE(<value>);
See TO_NUMBER demo.
TO_BINARY_FLOAT
Converts a Value to the BINARY_FLOAT Data Type TO_BINARY_FLOAT(<value>);
See TO_NUMBER demo.
TO_NUMBER
Converts a string to the NUMBER data type TO_NUMBER(<value>[, <format>, <NLS parameter>]);
CREATE TABLE test (
testcol VARCHAR2(10));
INSERT INTO test VALUES ('12345.67');
SELECT TO_BINARY_DOUBLE(testcol) BIN_DOUBLE, TO_BINARY_FLOAT(testcol) BIN_FLOAT, TO_NUMBER(testcol) NMBR
FROM test;
Converts a HEX number into a FLOAT TO_NUMBER(<value>, <format>);
SELECT TO_NUMBER('0A', 'XX')
FROM dual;
TRUNC
Truncates a Number to the Specified Number of Decimal Places TRUNC(<value>)
SELECT TRUNC(15.79, 1) FROM dual;
SELECT TRUNC(15.79, -1) FROM dual;
VAR_POP
Population Variance of a Set of Numbers VAR_POP(<column_name>)
SELECT VAR_POP(data_length) FROM all_tab_columns;
VAR_SAMP
Sample Variance of a Set of Numbers VAR_SAMP(<column_name>)
SELECT VAR_SAMP(data_length) FROM all_tab_columns;
VARIANCE
Variance of an Expression VARIANCE(<value>)
SELECT VARIANCE(initial_extent) FROM user_tables;
VSIZE
Byte Size VSIZE(<value>)
SELECT VSIZE(initial_extent) FROM all_tables;
WIDTH_BUCKET
Construct Equiwidth Histograms
n+1 bucket is for overflow WIDTH_BUCKET(<value>, <min_value>, <max_value>, <number_of_buckets>);
conn oe/oe
SELECT customer_id, cust_last_name, credit_limit,
WIDTH_BUCKET(credit_limit, 100, 4000, 10) CREDIT_GRP
FROM customers
WHERE nls_territory = 'SWITZERLAND'
ORDER BY credit_grp;