You are on page 1of 20

FUNCTIONS

Document prepared by: AN.Murugappan

1 .SINGLE ROW FUNCTION - THIS FUNCTION PERFORM ACTION ON SINGLE ROW (INPUT VALUES 1) 2. MULTPLE ROW FUNCTION THIS FUNCTION PERFORM ACTION ON SOME SET OF ROWS (INPUT VALUES > 1) SINGLE ROW FUNCTIONS

1.CHARACTER FUNCTION

CASE FUNCTION

UPPER( ) LOWER( ) INITCAP( ) CONCAT( ) SUBSTR( ) INSTR( ) LENGTH( ) LPAD | RPAD ( ) REPLACE( ) TRANSLATE( ) TRIM( )

CHARACTER FUNCTION

2.NUMBER FUNCTION`

ROUND( ) TRUNC( ) MOD( ) POWER( )

3.DATE FUNCTION

SYSDATE MONTHS_BETWEEN( ) ADD_MONTHS( ) NEXT_DAY( ) LAST_DAY( )

4.CONVERSION

TO_NUMBER( ) TO_DATE( ) TO_CHAR( )

5.GENERAL FUNCTION

NVL( ) NVL2( ) NULIF( ) COALSCE( )

CONTROL STATEMENTS

DECODE CASE

MULIPLE ROW FUNCTIONS GROUP FUNCTION AGGRECATING FUNCTION MIN( ) MAX( ) SUM( ) AVG( ) COUNT( )

GROUP BY HAVING

1. CHARACTER FUNCTION

- CASE MANUPLICATION - CHARACTER MANUPLICATION

CASE MANUPLICATION CASE FUNCTIONS UPPER(MY DOCUMENT) LOWER(MY DOCUMENT) INITCAP(MY DOCUMENT) RESULT MY DOCUMENT my document My Document

SELECT UPPER('my first query'),LOWER('my first query'),INITCAP('my first query') from dual;

CHARACTER MANUPLICATION CONCAT ( ) SUBSTR ( ) INSTR ( ) LPAD | RPAD ( ) REPLACE ( ) TRANSLATE ( ) LTRIM | RTEIM ( )

SELECT CONCAT ('Muthu','Karthi') FROM DUAL;

SELECT SUBSTR ('MURUGAPPAN', 1, 5) FROM DUAL;

SELECT SUBSTR ('MURUGAPPAN',-3, 3) FROM DUAL;

SELECT INSTR ('MURUGAPPAN','A') FROM DUAL;

SELECT INSTR ('MURUGAPPAN','A', 1, 2) FROM DUAL;

SELECT LPAD ('2500', 10,'*') FROM DUAL;

SELECT RPAD ('2500', 10,'*') FROM DUAL;

SELECT REPLACE ('MURUGAPPAN','AN','BC') FROM DUAL; - STRING BASED

SELECT TRANSLATE ('MURUGAPPAN CSE-A','UA','AB') FROM DUAL; CHARACTER BASED

SELECT TRIM ('M' FROM 'MAN') FROM DUAL;

SELECT LTRIM ('000000011230000', 0) FROM DUAL;

SELECT RTRIM ('000000011230000', 0) FROM DUAL;

SELECT LTRIM (RTRIM ('000000011230000', 0), 0) FROM DUAL;

2. NUMBER FUNCTIONS ROUND ( ) TRUNC ( ) MOD ( ) POWER ( ) ROUND ( ) SELECT ROUND (23.446, 2), ROUND (23.444, 2) FROM DUAL;

SELECT ROUND (23.744, 0), ROUND (23.244, 0) FROM DUAL;

SELECT ROUND (23.444,-1), ROUND (23.644,-1) FROM DUAL;

SELECT ROUND (27.644,-1), ROUND (27.644,-2), ROUND (567.644,-2) FROM DUAL;

TRUNC ( ) SELECT TRUNC (234.5678, 2) FROM DUAL; SELECT TRUNC (234.5678, 3) FROM DUAL; SELECT TRUNC (234.5678, 0) FROM DUAL;

SELECT TRUNC (234.5678,-1) FROM DUAL;

MOD ( ) SELECT MOD (12, 5) FROM DUAL; SELECT MOD (12, 2) FROM DUAL; SELECT MOD (12,-5) FROM DUAL; SELECT MOD (-12, 5) FROM DUAL; POWER ( ) SELECT POWER (2, 2) FROM DUAL; SELECT POWER (5, 2) FROM DUAL; RESULT: 4 RESULT: 25 RESULT: 2 RESULT: 0 RESULT: 2 RESULT: -2

3. DATE FUNCTIONS SYSDATE + MONTHS_BETWEEN ( ) ADD_MONTHS ( ) NEXT_DAY ( ) LAST_DAY ( )

ORACLE DATE FORMAT: DD-MM-YY

SYSDATE + -

SELECT SYSDATE FROM DUAL; SELECT SYSDATE+1 FROM DUAL; SELECT SYSDATE-1 FROM DUAL;

MONTHS_BETWEEN

SELECT MONTHS_BETWEEN (SYSDATE,'21-JAN-89') FROM DUAL;

SELECT ROUND (MONTHS_BETWEEN (SYSDATE,'21-JAN-89'), 0) AS MONTHS FROM DUAL;

THERE IS NO OTHER FUNCTION TO FIN DOUT THE YEAS BETWEEN SO WE USE MONTHS_BETWEEN/12

SELECT ROUND (MONTHS_BETWEEN (SYSDATE,'21-JAN-89')/12, 0) || YEARS FROM DUAL;

ADD_MONTHS

SELECT ADD_MONTHS ('12-FEB-11', 1) FROM DUAL; SELECT ADD_MONTHS ('12-FEB-11', 2) FROM DUAL;

SELECT ADD_MONTHS ('12-FEB-11',-1) FROM DUAL; SELECT ADD_MONTHS ('12-FEB-11',-2) FROM DUAL;

NEXT_DAY

SELECT NEXT_DAY ('31-JUL-11','WEDNESDAY') FROM DUAL; SELECT NEXT_DAY ('31-JUL-11','FRIDAY') FROM DUAL;

LAST_DAY SELECT LAST_DAY (SYSDATE) FROM DUAL; SELECT LAST_DAY ('21-FEB-11') FROM DUAL; SELECT LAST_DAY ('21-FEB-00') FROM DUAL; SELECT LAST_DAY ('21-JAN-11') FROM DUAL;

4. TYPE CONVERSIONS

TO_NUMBER ( ) TO_DATE ( ) TO_CHAR ( )

SELECT 5+5 FROM DUAL;

TO_NUMBER

CONVERSION -IMPLICIT CONVERSION -EXPLICIT CONVERSION

TO_NUMBER ( ) IMPLICIT CONVERSION

SELECT 5 + '15' FROM DUAL;

TO_NUMBER ( ) EXPLICIT CONVERSION

SELECT 5+TO_NUMBER ('15') FROM DUAL;

TO_CHAR ( ) IMPLICIT CONVERSION

SELECT 5 || 'B5' FROM DUAL;

TO_CHAR ( ) EXPLICIT CONVERSION

SELECT TO_CHAR (5) || 'B5' FROM DUAL

TO_DATE ( )

SELECT * FROM EMPLOYEES;

SELECT FIRST_NAME, LAST_NAME, SALARY, HIRE_DATE FROM EMPLOYEES WHERE HIRE_DATE='21-SEP-89';

IF I WRITE THE ABOVE QUERY BY USING THE DATE IN THIS FORMAT '21-SEP1988'

TO_DATE IMPLICIT CONVERSION

SELECT FIRST_NAME, LAST_NAME, SALARY, HIRE_DATE FROM EMPLOYEES WHERE HIRE_DATE='21-SEP-1989';

TO_DATE EXPLICIT CONVERSION

SELECT FIRST_NAME, LAST_NAME, SALARY, HIRE_DATE FROM EMPLOYEES WHERE HIRE_DATE = TO_DATE ('21-SEP-1989','DD-MM-YYYY');

SELECT FIRST_NAME, LAST_NAME, SALARY, HIRE_DATE FROM EMPLOYEES WHERE HIRE_DATE=TO_DATE ('SEP-21-1989','MM-DD-YYYY');

TO_CHAR

SELECT SYSDATE FROM DUAL;

SELECT TO_CHAR (SYSDATE,'DD-MM-YYYY') FROM DUAL;

DD MM MON

- DATE - TO SHOW THE MONTH LIKE THIS (07) - TO SHOW THE MONTH LIKE THIS (JUL)

MONTH - TO SHOW THE MONTH LIKE THIS (JULY) YY - TO SHOW THE YEAR LIKE THIS (11)

YYYY - TO SHOW THE YEAR LIKE THIS (2011) YEAR - TO SHOW THE YEAR LIKE THIS ()

SELECT TO_CHAR (SYSDATE,'DD') FROM DUAL; SELECT TO_CHAR (SYSDATE,'MM') FROM DUAL; SELECT TO_CHAR (SYSDATE,'MONTH') FROM DUAL; SELECT TO_CHAR (SYSDATE,'YY') FROM DUAL; SELECT TO_CHAR (SYSDATE,'YYYY') FROM DUAL; SELECT TO_CHAR (SYSDATE,'YEAR') FROM DUAL;

HH:MM:SS - 12 HOURS CLOCH

SELECT TO_CHAR (SYSDATE,'HH:MM:SS') FROM DUAL;

HH24: MM:SS - 24 HOURS CLOCH

SELECT TO_CHAR (SYSDATE,'HH24: MM:SS) FROM DUAL;

D (1-SUNDAY 2-MONDAY 3-TUESDAY 4-WEDNESDAY 5-THURSDAY 6-FRIDAY 7-SATURDAY)

SELECT TO_CHAR (SYSDATE,'D') FROM DUAL;

DDSPTH SELECT TO_CHAR (SYSDATE,'DDSPTH') FROM DUAL;

DDTH SELECT TO_CHAR (SYSDATE,'DDTH') FROM DUAL; 5. GENERAL FUNCTIONS NVL ( ) NVL2 ( ) NULIF ( ) COALSCE ( )

NVL - NVL ACCEPT TWO ARGUMENTS IF THE VALUE OF FIRST ARGUMENT IS NULL MEANS IT CAN BE REPLACE BY THE SECOND VALUE ELSE IT DISPLAY THE FIRST ARGUMENTS

SELECT COMMISSION_PCT, NVL (COMMISSION_PCT, 0) FROM EMPLOYEES;

* IN NVL BOTH ARGUMENTS SHOULD BE IN SAME FORMAT

SELECT NVL (TO_CHAR (COMMISSION_PCT),'NO') FROM EMPLOYEES;

NVL2 - IT CONTAIN 3 ARGUMENT IF THE VALUE OF THE FIRST ARGUMENT IS NULL MEANS IT DISPLAY THE THIRD ARGUMENT ELSE IT DISPLAY THE SECOND ARGUMENT

SELECT COMMISSION_PCT, NVL2 (COMMISSION_PCT, 1, 0) FROM EMPLOYEES;

NULLIF ACCEPT TWO ARGUMENTS IF BOTH THE VALUES ARE SAME MEANS IT RETURN NULL VALUE ELSE RETURN THE VALUE OF THE FIRST ARGUMENT

SELECT NULLIF (1, 1) FROM DUAL; SELECT NULLIF (2, 1) FROM DUAL; SELECT NULLIF (1, 2) FROM DUAL;

2 1

COALESEC

SELECT COALESCE (NULL, NULL, NULL, 45, NULL, NULL) FROM DUAL; CONTROL STATEMENTS DECODE CASE DECODE IT IS A FUNCTION OPERATOR ARE NOT ALLOWED TO USED INSIDE THE DECODE STATEMENT IF THE VALUE IS EXACTLY MATCHED THEN ONLY IT RETURN THE VALUE SELECT DISTINCT (DEPARTMENT_ID), DECODE (DEPARTMENT_ID, 10,'IT', 20,'BPO', 30,'KPO', 40,'ADMIN', 50,'HR','NILL') FROM EMPLOYEES

CASE

SELECT DISTINCT (DEPARTMENT_ID), CASE WHEN DEPARTMENT_ID = 10 THEN 'IT' WHEN DEPARTMENT_ID IN (20, 30) THEN 'BPO' WHEN DEPARTMENT_ID BETWEEN 40 AND 70 THEN 'KPO' ELSE 'XXX' END AS "DEPARTMENT_NAME" FROM EMPLOYEES ORDER BY 1;

ADVANTAGE OF USING CASE WE USE ALL OPERATORS WRITTEN IN MULTIPLE LINE FAST EXECUTION COMPARE TO DECODE

GROUP FUNCTIONS
MIN ( ) MAX ( ) SUM ( ) COUNT ( ) AVG ( )

MAX ( ) SELECT MAX (SALARY) FROM EMPLOYEES;

MIN ( ) SELECT MIN (SALARY) FROM EMPLOYEES;

SUM ( ) SELECT SUM (SALARY) FROM EMPLOYEES;

COUNT ( ) SELECT COUNT (SALARY) FROM EMPLOYEES;

SELECT COUNT (*) FROM EMPLOYEES;

* IS ONLY APPLICABLE FOR COUNT NOT FOR OTHER FUNCTIONS

SELECT COUNT (1) FROM EMPLOYEES;

AVG ( ) CREATE TABLE AVG (VALUE1 NUMBER (3));

INSERT INTO AVG VALUES (25); INSERT INTO AVG VALUES (25); INSERT INTO AVG VALUES (25); INSERT INTO AVG VALUES (25);

INSERT INTO AVG VALUES ('');

SELECT * FROM AVG;

THIS TABLE CONTAINS 5 VALUES

SELECT AVG (VALUE1) FROM AVG

100/5 = 20 BUT IT SHOWS 25 SO AVG () NOT CONSIDER NULL VALUES. INORDER TO AVOID IT WE USE NVL FUNCTION

SELECT AVG (NVL (VALUE1, 0)) FROM AVG

GROUP BY: IF YOU WANT TO SELECT ANY COLUMN WITH THE GROUP FUNCTION YOU HAVE TO GROUP THE COLUMN BY USING THE CLAUSE GROUP BY HAVING IS A CLAUSE USED BY GROUP FUNCTIONS WHILE IMPLEMENTING THE CONDITION SELECT DEPARTMENT_ID, MAX (SALARY) FROM EMPLOYEES

GROUP BY DEPARTMENT_ID HAVING MAX (SALARY) > 10000;

SELECT DEPARTMENT_ID, COUNT (DEPARTMENT_ID) A, CASE WHEN COUNT (DEPARTMENT_ID) = 45 THEN 'FIRST_RANK' WHEN COUNT (DEPARTMENT_ID) = 34 THEN 'SECOND_RANK' END FROM EMPLOYEES GROUP BY DEPARTMENT_ID HAVING COUNT (DEPARTMENT_ID) > 30;

ORDER OF CLAUSEES SELECT DEPARTMENT_ID, COUNT (EMPLOYEE_ID) FROM EMPLOYEES WHERE SALARY > 2000 GROUP BY DEPARTMENT_ID HAVING

COUNT (EMPLOYEE_ID) > 2 ORDER BY 2 DESC;

---------------------------------------------------------------------------------------------------------------------

You might also like