0% found this document useful (0 votes)
78 views

User Defined Functions Tables

The document discusses user defined functions in Oracle. It describes two types of tables - database tables which are stored in the database and non-database tables which are not stored in the database. The document provides examples of various aggregate functions like SUM, MAX, MIN, AVG, COUNT and examples of how to use them. It also discusses rank functions like ROW_NUMBER, DENSE_RANK which can be used to assign ranks at the table level or group level.
Copyright
© © All Rights Reserved
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
78 views

User Defined Functions Tables

The document discusses user defined functions in Oracle. It describes two types of tables - database tables which are stored in the database and non-database tables which are not stored in the database. The document provides examples of various aggregate functions like SUM, MAX, MIN, AVG, COUNT and examples of how to use them. It also discusses rank functions like ROW_NUMBER, DENSE_RANK which can be used to assign ranks at the table level or group level.
Copyright
© © All Rights Reserved
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 22

USER DEFINED FUNCTIONS

TABLES:
-------

Oracle supports two types of tables,

1. Database tables
2. Non-database tables

DATABASE TABLES: These tables store in database and each table has its own data.

Eg: EMP, DEPT, CUSTOMER….

NONDATABASE TABLES: These tables are not stored in the database, these tables are having nothing.

Eg: DUAL

This non-database table is used for,

1. For Calculations or expressions


2. For functions
3. For pseudo columns

FUNCTIONS:

1.SYSTEM DEFINED FUNCTIONS

1.AGGREGATE FUNCTIONS
2.RANK FUNCTIONS
3.NULL FUNCTIONS
4.NUMBER FUNCTIONS
5.DATE FUNCTIONS
6.STRING FUNCTIONS

2.USER DEFINED FUNCTIONS


1. SYSTEM DEFINED FUNCTIONS

AGGREGATE FUNCTIONS:
----------------------------------
THESE FUNCTIONS ARE USED TO CALCULATE ANYAGGREGATE VALUES LIKE SUM, MAX,MIN,AVG,
COUNT.

SUM(): IT IS USED TO SUM ALL VALUES OF A SPECIFIED COLUMN

Eg:

1. WHAT IS THE SUM OF SALARIES OF ALL EMPLOYEES?

SELECT SUM(SAL)
FROM EMP;

2. WHAT IS THE SUM OF SALARIES OF ALL CLERKS?

SELECT SUM(SAL)
FROM EMP
WHERE JOB='CLERK';

3. WHAT IS THE SUM OF SALARIES OF ALL THE EMPLOYEES WHO ARE TAKING LESS THEN 3000?

SELECT SUM(SAL)
FROM EMP
WHERE SAL<3000;

4. WHAT ARE THE SUM OF SALARIES OF THE EMPLOYEE WHO IS WORKING AS SALESMAN UNDER
30TH DEPT

SELECT SUM(SAL)
FROM EMP
WHERE JOB='SALESMAN' AND DEPTNO=30;

5. WHAT IS THE SUM OF SALARIES OF THE EMPS WHO IS NOT HAVING COMMS AND WORKING
UNDER 20TH DEPT?

SELECT SUM(SAL)
FROM EMP
WHERE COMM IS NULL AND DEPTNO=20;
MAX(): IT IS USED TO FIND MAXIMUM VALUE OF ALL VALUES IN SPECIFIED COLUMN.

Eg:

1. WHAT IS THE MAXIMUM SALARY IN THE EMP TABLE?

SELECT MAX(SAL)
FROM EMP;

2. WHAT IS THE ENAME WHO IS TAKING MAXIMUM SALARY IN THE EMP TABLE?

SELECT ENAME
FROM EMP
WHERE SAL =(SELECT MAX(SAL)
FROM EMP);

3. WHAT IS THE MAXIMUM SALARY IN 20TH DEPT?

SELECT MAX(SAL)
FROM EMP
WHERE DEPTNO=20;

4. WHAT IS THE ENAME WHO IS TAKING MAXIMUM SALARY IN THE 20TH DEPT?

SELECT ENAME,SAL
FROM EMP
WHERE SAL = (SELECT MAX(SAL)
FROM EMP
WHERE DEPTNO=20);

5. WHAT IS THE MAXIMUM SALARY OF THE EMPLOYEES WHO ARE NOT TAKING COMM AND
WORKING IN 20TH DEPT?

SELECT MAX(SAL)
FROM EMP
WHERE COMM IS NULL AND DEPTNO=20;

MIN():IT IS USED TO FIND MINIMUM VALUE OF ALL VALUES IN SPECIFIED COLUMN

Eg:

1. WHAT IS THE MINIMUM SALARY WHO IS WORKING IN 10TH DEPT?

SELECT MIN(SAL)
FROM EMP
WHERE DEPTNO=10;
2. WHAT IS THE MINIMUM SALES OF CUSTOMERS WHO IS TAKING SALESAMT IS LESS THEN 50000?

SELECT MIN(SALES)
FROM CUSTOMER
WHERE CID IN (SELECT CID
FROM PITAB
WHERE SALESAMT<50000);

3. WHAT IS THE MINIMUM SALES OF CUSTOMERS WHO ARE STAYING EAITHER IN HYD OR IN
PUNE?

SELECT MIN(SALES)
FROM CUSTOMER
WHERE LOC IN('HYD','PUNE');

AVG(): IT IS USED TO CALCULATE AVG OF ALL THE VALUES IN SPECIFIED COLUMN.

Eg:

1. WHAT IS THE AVG SALARIES OF ALL THE EMPLOYEES?

SELECT AVG(SAL)
FROM EMP;

2. WHAT IS THE AVG SALARIES OF THE EMPLOYEES WHO ARE TAKING COMM?

SELECT AVG(SAL)
FROM EMP
WHERE COMM IS NOT NULL;

3. WHAT IS THE AVG SALARIES OF THE EMPLOYEE WHO ARE NOT WORKING AS SALESMAN?

SELECT AVG(SAL)
FROM EMP
WHERE JOB <> 'SALESMAN';

4. WHAT IS THE AVG SALARIES OF THE EMPLOYEE WHO ARE NOT HAVING MANAGERS?

SELECT AVG(SAL)
FROM EMP
WHERE MGR IS NULL;
COUNT(): IT IS USED TO COUNT NO.OF VALUES OR ROWS.

Eg:

1. WHAT ARE THE NO.OF RECORDS IN EMP TABLE?

SELECT COUNT(*)
FROM EMP;

2. WHAT ARE THE NO.OF EMPLOYEES IN SALESMAN JOB?

SELECT COUNT(*)
FROM EMP
WHERE JOB='SALESMAN';

3. WHAT ARE THE NO.OF EMPLOYEES WHO ARE NOT TAKING COMMS?

SELECT COUNT(*)
FROM EMP
WHERE COMM IS NULL;

4. WHAT ARE THE NO.OF EMPLOYEES WHO ARE TAKING SALARIES LESS THEN 2000?

SELECT COUNT(*)
FROM EMP
WHERE SAL<2000;

RANK FUNCTIONS: THESE FUNCTIONS ARE USED TO ASSIGN RANKS.

Rank functions are three types:

1. Row_number()
2. Dense_rank()
3. Rank()

We can apply ranks at table level or at any particular group level also like job level.

We use ‘partition by’ to apply ranks at any group level.


SELECT *
FROM EMP;

EMPNO ENAME JOB MGR HIREDATE SAL OMM DEPTNO

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

7369 SMITH CLERK 7902 17-DEC-80 800 20


7499 ALLEN SALESMAN 7698 20-FEB-81 1600 300 30
7521 WARD SALESMAN 7698 22-FEB-81 1250 500 30
7566 JONES MANAGER 7839 02-APR-81 2975 20
7654 MARTIN SALESMAN 7698 28-SEP-81 1250 1400 30
7698 BLAKE MANAGER 7839 01-MAY-81 2850 30
7782 CLARK MANAGER 7839 09-JUN-81 2450 10
7788 SCOTT ANALYST 7566 19-APR-87 3000 20
7839 KING PRESIDENT 17-NOV-81 5000 10
7844 TURNER SALESMAN 7698 08-SEP-81 1500 0 30
7876 ADAMS CLERK 7788 23-MAY-87 1100 20
7900 JAMES CLERK 7698 03-DEC-81 950 30
7902 FORD ANALYST 7566 03-DEC-81 3000 20
7934 MILLER CLERK 7782 23-JAN-82 1300 10

14 rows selected.

ROW_NUMBER(): this function assigns unique ranks for all values including duplicate values
also.

--AT TABLE LEVEL:

SELECT ENAME,
JOB,
SAL,
ROW_NUMBER() OVER(ORDER BY SAL DESC) RN
FROM EMP;

ENAME JOB SAL RN


---------- --------- ---------- --------------------- -
KING PRESIDENT 5000 1
FORD ANALYST 3000 2
SCOTT ANALYST 3000 3
JONES MANAGER 2975 4
BLAKE MANAGER 2850 5
CLARK MANAGER 2450 6
ALLEN SALESMAN 1600 7
TURNER SALESMAN 1500 8
MILLER CLERK 1300 9
WARD SALESMAN 1250 10
MARTIN SALESMAN 1250 11
ADAMS CLERK 1100 12
JAMES CLERK 950 13
SMITH CLERK 800 14

14 rows selected.

--AT JOB LEVEL:

SELECT ENAME,
JOB,
SAL,
ROW_NUMBER() OVER(PARTITION BY JOB ORDER BY SAL DESC) RN
FROM EMP;

ENAME JOB SAL RN


---------- --------- ---------- ----------------------
FORD ANALYST 3000 1
SCOTT ANALYST 3000 2
MILLER CLERK 1300 1
ADAMS CLERK 1100 2
JAMES CLERK 950 3
SMITH CLERK 800 4
JONES MANAGER 2975 1
BLAKE MANAGER 2850 2
CLARK MANAGER 2450 3
KING PRESIDENT 5000 1
ALLEN SALESMAN 1600 1
TURNER SALESMAN 1500 2
MARTIN SALESMAN 1250 3
WARD SALESMAN 1250 4

14 rows selected.
DENSE_RANK()

This function assigns unique rank for distinct values and duplicate rank for duplicate values.

After same rank, this function continues the next rank, means it will not maintain any gaps
between ranks.

--AT TABLE LEVEL

SELECT ENAME,
JOB,
SAL,
DENSE_RANK() OVER(ORDER BY SAL DESC) DN
FROM EMP;

ENAME JOB SAL DN


---------- --------- ---------- --------------------
KING PRESIDENT 5000 1
FORD ANALYST 3000 2
SCOTT ANALYST 3000 2
JONES MANAGER 2975 3
BLAKE MANAGER 2850 4
CLARK MANAGER 2450 5
ALLEN SALESMAN 1600 6
TURNER SALESMAN 1500 7
MILLER CLERK 1300 8
ARD SALESMAN 1250 9
MARTIN SALESMAN 1250 9
ADAMS CLERK 1100 10
JAMES CLERK 950 11
SMITH CLERK 800 12

14 rows selected.

--AT JOB LEVEL:

SELECT ENAME,
JOB,
SAL,
DENSE_RANK() OVER(PARTITION BY JOB ORDER BY SAL DESC) DN
FROM EMP;
ENAME JOB SAL DN
---------- --------- ---------- -------------------
FORD ANALYST 3000 1
SCOTT ANALYST 3000 1
MILLER CLERK 1300 1
ADAMS CLERK 1100 2
JAMES CLERK 950 3
SMITH CLERK 800 4
JONES MANAGER 2975 1
BLAKE MANAGER 2850 2
CLARK MANAGER 2450 3
KING PRESIDENT 5000 1
ALLEN SALESMAN 1600 1
TURNER SALESMAN 1500 2
MARTIN SALESMAN 1250 3
WARD SALESMAN 1250 3

14 rows selected.

By using dense_rank(), we can find nth max or min salary also.

Display ename who is taking 5th max sal in the emp table

SELECT ENAME
FROM (SELECT ENAME,
JOB,
SAL,
DENSE_RANK() OVER(ORDER BY SAL DESC) DN FROM EMP) TT
WHERE DN=5;

ENAME
----------
CLARK

Display emp details who are taking max salaries in each job

SELECT *
FROM (SELECT ENAME,
JOB,
SAL,
DENSE_RANK() OVER(PARTITION BY JOB ORDER BY SAL DESC) DN
FROM EMP) WHERE DN=1;
ENAME JOB SAL DN
---------- --------- ---------- -------------------
SCOTT ANALYST 3000 1
FORD ANALYST 3000 1
MILLER CLERK 1300 1
JONES MANAGER 2975 1
KING PRESIDENT 5000 1
ALLEN SALESMAN 1600 1

6 rows selected.

For 2nd max salaries:

SELECT *
FROM (SELECT ENAME,
JOB,
SAL,
DENSE_RANK() OVER(PARTITION BY JOB ORDER BY SAL DESC) DN
FROM EMP)
WHERE DN=2;

ENAME JOB SAL DN


---------- --------- ---------- -----------------------
ADAMS CLERK 1100 2
BLAKE MANAGER 2850 2
TURNER SALESMAN 1500 2

For 3rd max salaries

SELECT *
FROM (SELECT ENAME,
JOB,
SAL,
DENSE_RANK() OVER(PARTITION BY JOB ORDER BY SAL DESC) DN
FROM EMP)
WHERE DN=3;

ENAME JOB SAL DN


---------- --------- ---------- ----------------------
JAMES CLERK 950 3
CLARK MANAGER 2450 3
WARD SALESMAN 1250 3
MARTIN SALESMAN 1250 3

Display emp details who are taking low salaries from each job in emp table:

SELECT *
FROM (SELECT ENAME,
JOB,
SAL,
DENSE_RANK() OVER(PARTITION BY JOB ORDER BY SAL) DN
FROM EMP) WHERE DN=1;

ENAME JOB SAL DN


---------- --------- ---------- -----------------
SCOTT ANALYST 3000 1
FORD ANALYST 3000 1
SMITH CLERK 800 1
CLARK MANAGER 2450 1
KING PRESIDENT 5000 1
WARD SALESMAN 1250 1
MARTIN SALESMAN 1250 1

7 rows selected.

RANK()

This function assigns unique rank for distinct values and duplicate rank for duplicate values, but
after same rank it will maintain gaps in the ranks.

--AT TABLE LEVEL

SQL> SELECT ENAME,


JOB,
SAL,
RANK() OVER(ORDER BY SAL DESC) RNK
FROM EMP;

ENAME JOB SAL RNK


---------- --------- ---------- ---------------------
KING PRESIDENT 5000 1
FORD ANALYST 3000 2
SCOTT ANALYST 3000 2
JONES MANAGER 2975 4
BLAKE MANAGER 2850 5
CLARK MANAGER 2450 6
ALLEN SALESMAN 1600 7
TURNER SALESMAN 1500 8
MILLER CLERK 1300 9
WARD SALESMAN 1250 10
MARTIN SALESMAN 1250 10
ADAMS CLERK 1100 12
JAMES CLERK 950 13
SMITH CLERK 800 14

14 rows selected.

--AT JOB LEVEL

SQL> SELECT ENAME,


JOB,
SAL,RANK() OVER(PARTITION BY JOB ORDER BY SAL DESC) RNK
FROM EMP;

ENAME JOB SAL RNK


---------- --------- ---------- --------------------
FORD ANALYST 3000 1
SCOTT ANALYST 3000 1
MILLER CLERK 1300 1
ADAMS CLERK 1100 2
JAMES CLERK 950 3
SMITH CLERK 800 4
JONES MANAGER 2975 1
BLAKE MANAGER 2850 2
CLARK MANAGER 2450 3
KING PRESIDENT 5000 1
ALLEN SALESMAN 1600 1
TURNER SALESMAN 1500 2
MARTIN SALESMAN 1250 3
WARD SALESMAN 1250 3

14 rows selected.
Eg1:

MARKS: RN DR RK
------ --- --- ---
550 1 1 1
540 2 2 2
540 3 2 2
530 4 3 4
500 5 4 5
450 6 5 6
450 7 5 6
450 8 5 6
400 9 6 9
390 10 7 10

Eg2:

SALARY RN DR RK
----- --- --- ---
30000 1 1 1
25000 2 2 2
25000 3 2 2
25000 4 2 2
20000 5 3 5
20000 6 3 5
12000 7 4 7
12000 8 4 7
10000 9 5 9
10000 10 5 9
9000 11 6 11
9000 12 6 11
NULL FUNCTIONS: These functions are used to handle null values.

Oracle supports 4 types of null functions,

1. NVL()
2. NVL2()
3. NULLIF()
4. COALESCE()

NVL(COL,VAL):
------------------
THIS FUNCTION CHECKS THE COL, IF THE COL CONTAINS NULL THEN REPLACE WITH VAL.

Eg:
SELECT ENAME,SAL,COMM,SAL+NVL(COMM,0) AS TS FROM EMP;

NVL2(COL,VAL1,VAL2):
--------------------
THIS FUNCTION CHECKS THE COL, IF COL CONTAINS NULL THEN REPLACE WITH VAL2 ELSE REPLACE
WITH VAL1.

Eg:
SELECT ENAME,SAL,COMM,SAL+NVL2(COMM,0,0) AS TS FROM EMP;

NULLIF(ARG1,ARG2):
---------------------------
THIS FUNCTION CHECKS BOTH VALUES, IF BOTH THE VALUES ARE SAME THEN IT RETURNS NULL ELSE IT
RETURNS ARG1 AS OUTPUT.

Eg:
SELECT NULLIF(10,10) FROM DUAL;......O/P: NULL
SELECT NULLF(10,20) FROM DUAL;.......O/P: 10

COALESCE(ARG1,ARG2.....):
-------------------------------------
THIS FUNCTION TAKES FIRST NON-NULL VALUE FROM ALL THE SPECIFIED COLUMNS ROW BY ROW.

TAB1:
-----
ID DID ENO CID
---- ----- ----- -----
NULL NULL NULL 1
NULL 2 NULL 9
NULL NULL 3 NULL
1 2 3 4
SEELCT COALESCE(ID,DID,ENO,CID) FROM TAB1;

1
2
3
1

STRING FUNCTIONS: THESE ALL STRING FUCNTIONS WORK ON STRING VALUES.

ASCII(ch):
------------
THIS FUNCTION FINDS THE ASCII VALUE OF SPECIFIED CHARACTER.

Eg:
SELECT ASCII('A') FROM DUAL;.......O/P: 65

SELECT ASCII('a') FROM DUAL;.......O/P: 97

CHR(VAL):
-------------

THIS FUNCTION RETURNS THE CHARACTER OF SPECIFIED ASCII VALUE.

Eg:
SELECT CHR(90) FROM DUAL;.........O/P: Z

SELECT CHR(122) FROM DUAL;........O/P: z

UPPER(STR):
----------------

IT CONVERTS STRING FROM LOWER CASE TO UPPER CASE.

Eg:
SELECT UPPER('hyderabad') FROM DUAL;

LOWER(STR):
-----------------

IT CONVERTS STRING FROM UPPER CASE TO LOWER CASE.

Eg:

SELECT LOWER('HYDERABAD') FROM DUAL;

1. HOW TO CONVERT ALL CNAMES INTO UPPER CASE PERMANENTLY IN THE CUSTOMER TABLE?

UPDATE CUSTOMER SET CNAME=UPPER(CNAME);


2. HOW TO CONVERT ALL DNAMES INTO LOWER CASE PERMANENTLY IN THE DEPARTMENT
TABLE?

UPDATE DEPARTMENT SET DNAME=LOWER(DNAME);

INITCAP(STR/COL):
-----------------------

IT CONVERTS FIRST LETTER OF EACH WORD INTO UPPERCASE AND REMAINING ALL LETTERS ARE IN
LOWER CASE.

Eg:

SELECT INITCAP('SQL SERVER AND ORACLE') FROM DUAL;....O/P: Sql Server And Oracle

1. HOW TO MAKE FIRST LETTER OF EACH CUSTOMER NAME INTO CAPITAL LETTER PERMANENTLY
IN CUSTOMER TABLE?

UPDATE CUSTOMER SET CNAME=INITCAP(CNAME);

SUBSTR(MAIN_STR,STARTING_POSITION,LENGTH):
-------------------------------------------------------------------

IT FETCHES A PART OF STRING FROM MAIN_STRING/COLUMN.

SELECT SUBSTR('HYDERABAD',3,4) FROM DUAL;..........O/P: DERA

SELECT SUBSTR('HYDERABAD',1,3) FROM DUAL;..........O/P: HYD

INSTR(STR,CHAR):
-----------------------
IT RETURNS THE INDEX POSITION OF SPECIFIC CHARACTER IN THE MAIN_STARING.

Eg:
SELECT INSTR('ORACLE','R') FROM DUAL;..........O/P: 2

NOTE: TO FIND THE SECOND OCCARANCE OF SAME CHARACTER WE SPECIFY FIRST OCCARANCE
POSITION PLUS ONE AS A THIRD ARGUMENT IN THE INSTR FUNCTION.

SELECT INSTR('HYDERABAD','D',4) FROM DUAL;......O/P: 9


REVERSE(STR):
-------------------
IT REVERSES THE GIVEN STRING.

Eg:
SELECT REVERSE(CNAME) FROM CUSTOMER;

REPLACE(STR,OLD_STR,NEW_STR):
---------------------------------------------
IT WILL REPLACE THE OLD_STR WITH NEW_STR IN THE MAIN_STR.

Eg:
SELECT REPLACE('HYDERABAD','HYD','________') FROM DUAL;

Eg:

TAB1:

DESC
--------
WE ARE IN INDIA.
WE LOVE INDIA.
INDIA WON 2011 WC

OUTPUT:

DESC:
-------
WE ARE IN IND.
WE LOVE IND.
IND WON 2011 WC.

UPDATE TAB1 SET DESC=REPLACE(DESC,'INDIA','IND')

LENGTH(STR):
-------------------

IT FINDS LENTH OF GIVEN STRING.

SELECT LENGTH('HYDERABAD') FROM DUAL;...........O/P: 9


LTRIM(STR)
---------------
IT REMOVES LEFT SIDE EMPTY SPACE OF GIVEN STRING OR COLUMN.

Eg:
SELECT LTRIM(' HYDERABAD') FROM DUAL;........O/P: HYDERABAD

RTRIM(STR):
----------------
IT REMOVES RIGHT SIDE EMPTY SPACE OF GIVEN STRING OR COLUMN.

Eg:
SELECT RTRIM(' HYDERABAD ') FROM DUAL;...O/P: HYDERABAD

TRIM(STR):
-------------
IT REMOVES BOTH LEFT AND RIGHT SIDES EMPTY SPACE OF GIVEN STRING OR COLUMN.

Eg:
SELECT TRIM(' HYDERABAD ') FROM DUAL; HYDERABAD

NUMBER FUNCTIONS

ROUND(N):
--------------
IT ROUNDS THE GIVEN VALUE.

Eg:
SELECT ROUND(10.9) FROM DUAL;.......O/P: 11
SELECT ROUND(10.1) FROM DUAL;........O/P: 10
SELECT ROUND(10.5) FROM DUAL;........O/P: 11

CEIL(N):
-----------
IT RETURNS NEXT INTEGER NUMBER TO THE CURRENT NUMBER.

Eg:
SELECT CEIL(12.82743) FROM DUAL;......O/P: 13
SELECT CEIL(12.99999) FROM DUAL;......O/P: 13
SELECT CEIL(12.11111) FROM DUAL;.......O/P: 13
SELECT CEIL(12.0000) FROM DUAL;.........O/P: 12
FLOOR(N):
-------------
IT RETURN CURRENT INTEGER NUMBER FROM THE GIVEN NUMBER.

Eg:
SELECT FLOOR(12.23476) FROM DUAL;.......O/P: 12
SELECT FLOOR(12.99999) FROM DUAL;.......O/P: 12
SELECT FLOOR(12.11111) FROM DUAL;.......O/P: 12
SELECT FLOOR(12.00000) FROM DUAL;.......O/P: 12

SQRT(N):
------------
IT RETURNS THE SQUARE ROOT VALUE FOR GIVEN VALUE

EG:
SELECT SQRT(100) FROM DUAL;.............O/P: 10
SELECT SQRT(36) FROM DUAL;................O/P: 6

POWER(M,N):
------------------
IT RETURNS M POWER N VALUE.

Eg:
SELECT POWER(3,3) FROM DUAL;.......O/P: 27
SELECT POWER(3,4) FROM DUAL;.......O/P: 81

DATE FUNCTIONS: These functions are used to work with date values.

TO DIPLAY CURRENT DATE:

SELECT SYSDATE FROM DUAL;

MONTHS_BETWEEN(END_DATE,START_DATE):
---------------------------------------------------------------
IT CALCULATES NO.OF MONTHS BETWEEN TWO DATES.

Eg:
SELECT MONTHS_BETWEEN(SYSDATE,'01-MAR-2017') FROM DUAL;.............O/P: 6.31
SELECT MONTHS_BETWEEN('10-MAR-2017','10-MAR-1989') FROM DUAL;….O/P: 336
SELECT MONTHS_BETWEEN(SYSDATE,HIREDATE) FROM EMP;
ADD_MONTHS(DATE,N):
--------------------------------
IT ADDS N NO.OF MONTHS TO THE GIVEN DATE.

Eg:
SELECT ADD_MONTHS(SYSDATE,4) FROM DUAL;…………………...O/P: 13-JAN-18
SELECT ADD_MONTHS(SYSDATE,-4) FROM DUAL;……………….….O/P: 13-MAY-17
SELECT ADD_MONTHS('01-JAN-2017',10) FROM DUAL;…………..O/P: 01-NOV-17

LAST_DAY(DATE):
-----------------------
THIS FUNCTION RETURNS LAST DAY OF GIVEN DATE.

Eg:
SELECT LAST_DAY(SYSDATE) FROM DUAL;........................O/P: 30-SEP-17
SELECT LAST_DAY('10-JAN-2010') FROM DUAL;................O/P: 31-JAN-10

NEXT_DAY(DATE,'WEEK_NAME')
-------------------------------------------
THIS FUNCTION RETURNS DATE OF GIVEN WEEK FROM THE SPECIFIED DATE.

Eg:
SELECT NEXT_DAY(SYSDATE,'MON') FROM DUAL;.........................O/P: 18-SEP-17
SELECT NEXT_DAY('20-DEC-2015','MON') FROM DUAL;…………......O/P: 21-DEC-2015

EXTRACT(YEAR/MONTH/DAY FROM DATE):


----------------------------------------------------------
THIS FUNCTION EXTRACTS EAITHER YEAR, MONTH OR DAY FROM GIVEN DATE.

Eg:
SELECT EXTRACT(YEAR FROM SYSDATE) FROM DUAL;.................O/P: 12
SELECT EXTRACT(MONTH FROM SYSDATE) FROM DUAL;............O/P: 9
SELECT EXTRACT(DAY FROM SYSDATE) FROM DUAL;…………........O/P: 12

CONVERSION FUNCTIONS: These functions are used to convert datatypes of values.

1. TO_CHAR()
2. TO_DATE()
3. TO_NUMBER()
TO_CHAR():

TO_CHAR function converts a datetime value (DATE, TIMESTAMP data types i.e.) to a string using the
specified format.

The default date format in oracle is dd-mon-yy.

Eg:

SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD') FROM dual;……………..O/P: 2017-09-14

SELECT TO_CHAR(SYSDATE, 'YY-MM-DD') FROM dual;………………….O/P: 17-09-14

SELECT TO_CHAR(SYSDATE, 'MM-DD-yyyy') FROM dual;……………….O/P: 09-14-201

SELECT TO_CHAR(SYSDATE, 'MM-DD-yy') FROM dual;…………………..O/P: 09-14-17

SELECT TO_CHAR(SYSDATE, 'MM-DD/yy') FROM dual;………………….O/P: 09-14/17

SELECT TO_CHAR(SYSDATE, 'DD-mm-yy') FROM dual;……………………O/P: 14-09-17

SELECT TO_CHAR(SYSDATE, 'DD-mon-yy') FROM dual;…………………..O/P: 14-sep-17

SELECT TO_CHAR(SYSDATE, 'DD-MONTH-yy') FROM dual;……………..O/P: 14-SEPTEMBER-17

SELECT TO_CHAR(SYSDATE, 'DAY') FROM dual;………………………………O/P: THURSDAY

SELECT TO_CHAR(SYSDATE, 'DDMONYYYY') FROM dual;………………..O/P: 14SEP2017

SELECT TO_CHAR(SYSDATE, 'MONTH') FROM dual;…………………………O/P: SEPTEMBER

SELECT TO_CHAR(SYSDATE, 'YEAR') FROM dual;………………………………O/P: TWENTY SEVENTEEN

SELECT TO_CHAR(SYSDATE, 'DD-MONTH-YEAR') FROM dual;…O/P: 14-SEPTEMBER-TWENTY SEVENTEEN

SELECT TO_CHAR(SYSDATE, 'DAY-MONTH-YEAR') FROM dual;


…………O/P:THURSDAY -SEPTEMBER-TWENTY SEVENTEEN
TO_DATE():

TO_DATE function converts a string value to DATE data type value using the specified format

Eg:

SELECT TO_DATE('2012-06-05', 'YYYY-MM-DD') FROM dual;…….O/P: 05-JUN-12

SELECT TO_DATE('20-06-05', 'YY-MM-DD') FROM dual;…………….O/P: 05-JUN-20

SELECT TO_DATE('10-06-05', 'MM-YY-DD') FROM dual;…………….O/P: 05-OCT-06

SELECT TO_DATE('10-06-05', 'DD-YY-MM') FROM dual;…………….O/P: 10-MAY-06

SELECT TO_DATE('10-06-05', 'MM-DD-YYYY') FROM dual;…………O/P: 06-OCT-05

You might also like