Wednesday, 4 January 2017

SQL DATE FUNCTIONS



DATE FUNCTIONS:
----------------------------
ADD_MONTHS: this will add specified months to the given date.
---------------------
ADD_MONTHS(date,no.of months)

SELECT ADD_MONTHS(SYSDATE,5),ADD_MONTHS(SYSDATE,-5),ADD_MONTHS(SYSDATE,0) FROM DUAL;
SELECT ADD_MOTHS('04/JUN/1989',3) FROM DUAL;

SELECT ADD_MONTHS(TO_DATE('04/23/2013','DD/MM/YYYY')+5) FROM DUAL;

SELECT ADD_MONTHS(SYSDATE,NULL) FROM DUAL; --if no.of months null it will display nothing.

MONTHS_BETWEEN: this will give difference months between two DATES.
----------------------------

MONTHS_BETWEEN(date1,date2):

SELECT MONTHS_BETWEEN(SYSDATE,'12-JAN-2014') FROM DUAL;

SELECT MONTHS_BETWEEN(SYSDATE,HIREDATE) FROM EMP;

SELECT MONTHS_BETWEEN(ADD_MONTHS(SYSDATE+5),SYSDATE) FROM DUAL;

SELECT MONTHS_BETWEEN(SYSDATE,TO_DATE('12-JAN-2014','DD-MON-YYYY')) FROM DUAL;


NEXT_DAY: It produce next day of the given day from specified date.
-----------------

SELECT NEXT_DAY(SYSDATE,'WED') FROM DUAL;

SELECT NEXT_DAY(SYSDATE,5) FROM DUAL;

LAST_DAY: It produce last day of the given day from specified date.
----------------
SELECT LAST_DAY(SYSDATE) FROM DUAL;
SELECT LAST_DAY('06-FEB-2016') FROM DUAL;

EXTRACT: This is used to extract the portion of the date value.
---------------

Syntax: – EXTRACT ((year | month | day | hour | minute | second) FROM date);
--------
 SELECT EXTRACT(YEAR FROM SYSDATE) FROM DUAL;

 SELECT EXTRACT(MONTH FROM SYSDATE) FROM DUAL;

 SELECT EXTRACT(DAY FROM SYSDATE) FROM DUAL;

 select extract (hour from cast(sysdate as timestamp)) from dual
 select extract (SECOND from cast(sysdate as timestamp)) from dual;
  SELECT EXTRACT( HOUR FROM interval '0 2:34' day to minute) FROM DUAL;
  SELECT EXTRACT( SECOND FROM interval '0 2:34:50' day to SECOND) FROM DUAL;
 
  SELECT EXTRACT(HOUR FROM NUMTODSINTERVAL(sysdate - trunc(sysdate), 'DAY')) FROM DUAL;
  SELECT EXTRACT(MINUTE FROM NUMTODSINTERVAL(sysdate - trunc(sysdate), 'DAY')) FROM DUAL;
  SELECT EXTRACT(SECOND FROM NUMTODSINTERVAL(sysdate - trunc(sysdate), 'DAY')) FROM DUAL;


 NUMTODSINTERVAL converts n to an INTERVAL DAY TO SECOND literal.
  The argument n can be any NUMBER value or an expression that can be implicitly converted to a NUMBER value.
  The argument interval_unit can be of CHAR, VARCHAR2, NCHAR, or NVARCHAR2 datatype.
  The value for interval_unit specifies the unit of n and must resolve to one of the following string values:

    'DAY'

    'HOUR'

    'MINUTE'

    'SECOND'
           
            SQL> SELECT NUMTODSINTERVAL(1,'DAY') FROM DUAL;


NUMTODSINTERVAL(1,'DAY')

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

+000000001 00:00:00.000000000

SQL> SELECT NUMTODSINTERVAL(1,'HOUR') FROM DUAL;


NUMTODSINTERVAL(1,'HOUR')

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

+000000000 01:00:00.000000000

SQL> SELECT NUMTODSINTERVAL(1,'MINUTE') FROM DUAL;

NUMTODSINTERVAL(1,'MINUTE')

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

+000000000 00:01:00.000000000

SQL> SELECT NUMTODSINTERVAL(1,'SECOND') FROM DUAL;

NUMTODSINTERVAL(1,'SECOND')

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

+000000000 00:00:01.000000000


SQL> SELECT NUMTODSINTERVAL(1,'MONTH') FROM DUAL;

SELECT NUMTODSINTERVAL(1,'MONTH') FROM DUAL;

                         *

ERROR at line 1:

ORA-01760: illegal argument for function

select to_char(sysdate, 'hh24:mi:ss') "Current Time",
  2     extract(hour from to_timestamp(to_char(sysdate, 'dd-mon-yy hh24:mi:ss'))) "Hour",
  3     extract(minute from to_timestamp(to_char(sysdate, 'dd-mon-yy hh24:mi:ss'))) "Minute",
  4     extract(second from to_timestamp(to_char(sysdate, 'dd-mon-yy hh24:mi:ss'))) "Second"
  5     from dual;

Current        Hour     Minute     Second
-------- ---------- ---------- ----------
12:40:02         12         40          2

=====================================================================================================================
GREATEST:
----------
SELECT  GREATEST(DATE1,DATE2);

LEAST:
------
SELECT LEAST(DATE1,DATE2);

ROUND: ROUND will ROUNDs the date to which it was equal to or greater than the given date.
------
Syntax: – ROUND (date, (day | month | year))
•           If the second parameter was year then ROUND will checks the month of the given date in
The following ranges.

JAN    —    JUN
JUL     —    DEC

•           If the month falls between JAN and JUN then it returns the first day of the current year.
•           If the month falls between JUL and DEC then it returns the first day of the next year.
EXAMPLE:
--------
SELECT ROUND(TO_DATE('12-FEB-2016','DD-MON-YYYY'),'YEAR') FROM DUAL;
SELECT ROUND(TO_DATE('12-AUG-2016','DD-MON-YYYY'),'YEAR') FROM DUAL;

MONTH:
-----
•           If the day falls between 1 and 15 then it returns the first day of the current month.
•           If the day falls between 16 and 31 then it returns the first day of the next month.
EXAMPLE:
--------
SELECT ROUND(TO_DATE('12-AUG-2016','DD-MON-YYYY'),'MONTH') FROM DUAL;
SELECT ROUND(TO_DATE('22-AUG-2016','DD-MON-YYYY'),'MONTH') FROM DUAL;

DAY:
----
•           If the second parameter was day then ROUND will checks the week day of the given date
•           In the following ranges.
SUN    —    WED
THU     —    SUN

•           If the week day falls between SUN and WED then it returns the previous Sunday.
•           If the weekday falls between THU and SUN then it returns the next Sunday.
•           If the second parameter was null then it returns nothing.
•           If we are not specifying the second parameter then ROUND will resets the time to the beginning of the current day in case of user specified date.
•           If we are not specifying the second parameter then ROUND will resets the time to the beginning of the next day in case of SYSDATE.

TRUNC:
------
•TRUNC will chops off the date to which it was equal to or less than the given date.

Syntax: – TRUNC (date, (day | month | year))
•           If the second parameter was year then it always returns the first day of the current year.
•           If the second parameter was month then it always returns the first day of the current month.
•           If the second parameter was day then it always returns the previous Sunday.
•           If the second parameter was null then it returns nothing.
•           If  you are not specifying the second parameter then trunk will resets the time to the beginning of the current day.





CONVERSION FUNCTIONS:
----------------------------------------
Explicite data type conversions:
-------------------------------------
sql provides 3 functions to convert a value from one datatype to another datatype.

TO_CHAR()
TO_NUMBER()
TO_DATE()


TO_CHAR:
--------------
THE TO_CHAR function will convert number or date to character string.

this function can be used in to different flavours
TO_CHAR(NUMBER CONVERSION TO CHARACTER CONVERSION)
TO_CHAR(DATE   CONVERSION TO CHARACTER CONVERSION)

SYNTAX FOR NUMBER TO CHARACTER CONVERSION:
------------------------------------------
TO_CHAR(NUMBER,fmt,nlsparms)

fmt:-it is the optional number formate
nlsparms:-character return by the number formate element.

1.DECIMAL INDICATOR:(D)
---------------------
SELECT 20345,TO_CHAR(20345,99999D99) FROM DUAL;

2.SCIENTIFIC NOTATION INDICATOR:(EEEE)
---------------------------------
SELECT TO_CHAR(1234,'9999EEEE') FROM DUAL;
SELECT TO_CHAR(123.34,'999.99EEEE') FROM DUAL;

SELECT TO_CHAR(123.34,'999.9EEEE') FROM DUAL;

3.GROUP SEPARATOR:(G)
------------------
SELECT TO_CHAR(4500,4G500) FROM DUAL;

4.TRAILING MINUS INDICATOR:(MI)
--------------------------------
SELECT -9000,TO_CHAR(-9000,'9999MI') FROM DUAL;

5.NEGATIVE NUMBER INDICATOR:(PR,PT)
-----------------------------------
SELECT TO_CHAR(-9000,'9999PR') FROM DUAL;--here PR indicates the < >
SELECT TO_CHAR(-9000,'9999PT') FROM DUAL;--here PT indicates the ( )

6.LOCAL CURRENCY INDICATOR:(L)
-------------------------------

SELECT TO_CHAR(4500,'999L') FROM DUAL;

7.GROUP SEPARATOR:(,)
---------------------
SELECT TO_CHAR(8400,'9,999) FROM DUAL;

8.DECIMAL INDICATOR:(.)
-----------------------
SELECT TO_CHAR(4500,'99.99') FROM DUAL;

9.DOLLAR INDICATOR:($)
----------------------
SELECT TO_CHAR(4500,'$9999) FROM DUAL;
SELECT TO_CHAR(4500,'9999$') FROM DUAL;

10.ROMAN NUMBER INDICATOR:(RN OR rn)
-----------------------------------
SELECT TO_CHAR(45,'RN') FROM DUAL;

11.HEXA DECIMAL INDICATOR:(X---XXXX)
--------------------------------------
SELECT TO_CHAR(10,'X') FROM DUAL;
SELECT TO_CHAR(11,'XX') FROM DUAL;
SELECT TO_CHAR(12,'XX') FROM DUAL;
SELECT TO_CHAR(13,'XX') FROM DUAL;
SELECT TO_CHAR(123,'XXX') FROM DUAL;

12.ZERO INDICATOR:(0)
--------------------
SELECT TO_CHAR(9,'09') FROM DUAL;
SELECT TO_CHAR(45,'990') FROM DUAL;

13.ISO CURRENCY INDICATOR:(C)
----------------------------
SELECT TO_CHAR(4560,'C9999') FROM DUAL;


DATE TO CHARACTER CONVERSION:
----------------------------------------------------

1.AD or A.D / BC or B.C INDICATOR: indicates with or without periods.
----------------------------------
SELECT TO_CHAR(SYSDATE,'AD'),TO_CHAR(SYSDATE,'BC') FROM DUAL;

2.MERIDIAN INDICATOR: (AM or A.M/PM or P.M)
-------------------------------------------
It indicates with or without periods.

SELECT TO_CHAR(SYSDATE,'AM'),TO_CHAR(SYSDATE,'PM') FROM DUAL;

3.CENTURY INDICATOR:(CC/SCC)
----------------------------
it indicates the century, S prefixes BC date with '-'

SELECT TO_CHAR(SYSDATE,'CC-AD'),TO_CHAR(SYSDATE,'SCC-AD') FROM DUAL;

4.NUMERIC WEEK DAY INDICATOR:(D-->1-7)
--------------------------------------
SELECT TO_CHAR(SYSDATE,'D') FROM DUAL;

5.NUMERIC MONTH INDICATOR:(MM)
-------------------------------
SELECT TO_CHAR(SYSDATE,'MM') FROM DUAL;

6.NUMERIC YEAR INDICATOR:(YYYY OR SYYYY):
----------------------------------------
7.MONTH DAY INDICATOR:(DD-->1-31)
---------------------------------
8.YEAR DAY INDICATOR:(DDD--->1-366)
----------------------------------
9.ABBREVATED DAY INDICATOR:(DY)
---------------------------
SELECT TO_CHAR(SYSDATE,'DD-DY-DAY') FROM DUAL;

10.WEE DAY INDICATOR:(DAY)
--------------------------
11.ISO STANDARD YEAR WEEK INDICATOR:(IW)
---------------------------------------
it spefies the week of the year (1-52 or 1-53) based on ISO standard.
12.ISO STANDARD 4 DIGIT INDICATOR:(IYYY)
------------------------------------------
can be used combination of IYY,IY,I
13.FOUR DIGIT YEAR INDICATOR:(YYYY or SYYYY)
------------------------------------------
14.SPELLED YEAR INDICATOR:(YEAR or SYEAR)
---------------------------------------
15.WEEK OF THE MONTH:(W--->1-5)
---------------------------------
16.YEAR WEEK INDICATOR:(1-53  ANSII BASED WW)
--------------------------------------------
17.QUARTER OF THE YEAR:(Q)
-------------------------
18.JULIAN DAY INDICATOR:(J)
---------------------------
it is number of days since jan1-4712BC
19.ABBREVATED MONTH INDICATOR:(MON)
----------------------------------
20.MONTH SPELLED INDICATOR:(MONTH)
----------------------------------
21.TWELVE  HOUR CLOCK MODE:(HH or HH12)
---------------------------------
22.TWENTY FOUR HOUR CLOCK MODE:(HH24)
--------------------------------------
23.MINUTES INDICATOR:(MI)
24.SECONDS INDICATOR:(SS)
-------------------------
25.DATE FORMATE ELEMENT SUFFIXES:(TH or SP or RD or ND or ST)
---------------------------------------------------------------

========================================================================
TO_NUMBER: TO_NUMBER(CHAR,fmt,nlsparms)
-------------------------------------
IT CONVERTS CHARACTER INTO NUMBER

EX:TO_NUMBER('$1,000','L9G999') FROM DUAL;  --1000

EX:SELECT TO_CHAR(TO_NUMBER(1,234.00,'9G999D99)+TO_NUMBER(2,346.89,'9,999.99),'9G999D99')RESULT FROM DUAL;


TO_DATE:TO_DATE(CHAR,fmt,nlsparms)
----------------------------------
IT converts CHAR TO CHAR or VARCHAR2 data type

SELECT TO_DATE('12-JUN-2013','DD-MON-YYYY') FROM DUAL;
SELECT TO_CHAR(TO_DATE('12-JUN-2013','DD-MON-YYYY'),'DDSP-MONTH-YEAR') FROM DUAL;

SELECT '12-JUN-2013'+3 FROM DUAL;

SELECT TO_CHAR(TO_DATE('12-DEC-2013','DD-MON-YYYY'),'DD-MONTH-DAY') FROM DUAL;

No comments:

Post a Comment