You are on page 1of 8

5/24/2017 Oracle/PLSQLDateFunctions

PSOUGHome CodeSnippets OracleLookup OracleReference OracleErrorCodes


TO_DATE,CURRENT_DATE,INTERVAL,MONTHS_BETWEEN,DateCalculations,TimeCalculations"> OracleFunctions PSOUGForum

CODE JOBS FORUM


OracleCodeLibrary FindOrPostOracleJobs OracleDiscussion&Chat

PSOUGHome CodeSnippets OracleReference OracleFunctions PSOUGForum OracleBlogs



CustomSearch
21 SearchtheReferenceLibrarypages:
Search

OracleDateFunctions
Free Version11.1
Oracle
Magazine Date
Subscriptions
andOracle
CURRENT_DATE
WhitePapers SYSDATE
CurrentDate SELECTTO_CHAR(CURRENT_DATE,'DDMONYYYYHH:MI:SS')FROMDUAL

SELECTTO_CHAR(SYSDATE,'DDMONYYYYHH:MI:SS')FROMDUAL
Day Month Year FillMode JulianDate
D MM YY FM J
Formats DD MON YYYY
DDTH RR
DAY RRRR

+AND
<date>+<integer>
+
SELECTSYSDATE+1FROMDUAL
<date><integer>

SELECTSYSDATE1FROMDUAL

ADD_MONTHS
ADD_MONTHS(<date>,<numberofmonths_integer>
AddAMonthToADate
SELECTadd_months(SYSDATE,2)FROMDUAL

butbeawareofwhatitisdoing
SELECTadd_months(TO_DATE('27JAN2007'),1)FROMDUAL

SELECTadd_months(TO_DATE('28JAN2007'),1)FROMDUAL

SELECTadd_months(TO_DATE('29JAN2007'),1)FROMDUAL

SELECTadd_months(TO_DATE('30JAN2007'),1)FROMDUAL

SELECTadd_months(TO_DATE('31JAN2007'),1)FROMDUAL

SELECTadd_months(TO_DATE('01FEB2007'),1)FROMDUAL

CURRENT_DATE

Returnsthecurrentdateinthe
colsessiontimezoneformata30
sessiontimezone,inavaluein
theGregoriancalendarof
SELECTsessiontimezone,current_date
datatypeDATE
FROMDUAL

ALTERSESSIONSETTIME_ZONE='5:0'

SELECTsessiontimezone,current_date

http://psoug.org/reference/date_func.html 1/8
5/24/2017 Oracle/PLSQLDateFunctions

PSOUGHome CodeSnippets FROMDUAL


OracleLookup OracleReference OracleErrorCodes OracleFunctions PSOUGForum

ALTERSESSIONSETNLS_DATE_FORMAT='DDMONYYYYHH24:MI:SS'

SELECTsessiontimezone,current_date
FROMDUAL

ALTERSESSIONSETTIME_ZONE='7:0'

SELECTsessiontimezone,current_date
FROMDUAL

ALTERSESSIONSETNLS_DATE_FORMAT='DDMONYYYY'

DUMP
DUMP(<value>[,<return_format>[,<start_position>[,<length>]]])
ReturnsaVARCHAR2value
containingthedatatypecode, 8 Octal
lengthinbytes,andinternal
10 Decimal
representationofavalue
16 Hexidecimal
17 SingleCharacters
1008 octalnotationwiththecharactersetname
1010 decimalnotationwiththecharactersetname
1016 hexadecimalnotationwiththecharactersetname
1017 singlecharacterswiththecharactersetname

coldrowsformata40

SELECTDUMP(SYSDATE)DROWSFROMDUAL

SELECTDUMP(SYSDATE,8)DROWSFROMDUAL

SELECTDUMP(SYSDATE,16)DROWSFROMDUAL

GREATEST
GREATEST(<date>,<date>,<date>,...)
ReturntheLatestDate
CREATETABLEt(
datecol1DATE,
datecol2DATE,
datecol3DATE)
PCTFREE0

INSERTINTOtVALUES(SYSDATE+23,SYSDATE10,SYSDATE24)
INSERTINTOtVALUES(SYSDATE15,SYSDATE,SYSDATE+15)
INSERTINTOtVALUES(SYSDATE7,SYSDATE18,SYSDATE9)
COMMIT

SELECT*FROMt

SELECTGREATEST(datecol1,datecol2,datecol3)
FROMt

INTERVAL
INTERVAL'<integer>'<unit>
Intervaltoadjustdatetime
SELECTTO_CHAR(SYSDATE,'HH:MI:SS')
FROMDUAL

SELECTTO_CHAR(SYSDATE+INTERVAL'10'MINUTE,'HH:MI:SS')
FROMDUAL

SELECTTO_CHAR(SYSDATEINTERVAL'10'MINUTE,'HH:MI:SS')
FROMDUAL

LAST_DAY
http://psoug.org/reference/date_func.html 2/8
5/24/2017 Oracle/PLSQLDateFunctions

PSOUGHome CodeSnippets
ReturnsTheLastDateOfA LAST_DAY(<date>)
OracleLookup OracleReference OracleErrorCodes OracleFunctions PSOUGForum
Month
SELECT*FROMt

SELECTLAST_DAY(datecol1)FROMt

LEAST
LEAST(<date>,<date>,<date>,...)
ReturntheEarliestDate SELECT*FROMt

SELECTLEAST(datecol1,datecol2,datecol3)FROMt

LENGTH
LENGTH(<date>)
Returnslengthincharacters
SELECTLENGTH(last_ddl_time)FROMuser_objects

LENGTHB
LENGTHB(<date>)
Returnslengthinbytes
SELECTLENGTHB(last_ddl_time)FROMuser_objects
Note:AdditionalformsofLENGTH(LENGTHC,LENGTH2,andLENGTH4)arealsoavailable.

MAX
MAX(<date>)
ReturntheLatestDate SELECT*FROMt

SELECTMAX(datecol1)FROMt

MIN
MIN(<date>)

ReturntheEarliestDate SELECT*FROMt

SELECTMIN(datecol1)FROMt

MONTHS_BETWEEN
MONTHS_BETWEEN(<latest_date>,<earliest_date>)
ReturnsTheMonthsSeparating SELECTMONTHS_BETWEEN(SYSDATE+365,SYSDATE365)FROMDUAL
TwoDates
SELECTMONTHS_BETWEEN(SYSDATE365,SYSDATE+365)FROMDUAL

NEW_TIME
Beforeusingthisfunction,youmustsettheNLS_DATE_FORMAT
Returnsthedateandtimeintime parametertodisplay24hourtime.
zonezone2whendateandtimein
SELECTNEW_TIME(TO_DATE('11109901:23:45',
timezonezone1aredate
'MMDDYYHH24:MI:SS'),'AST','PST')"NewDateandTime"
FROMDUAL

ALTERSESSIONSETNLS_DATE_FORMAT='DDMONYYYYHH24:MI:SS'

SELECTNEW_TIME(TO_DATE('11109901:23:45',
'MMDDYYHH24:MI:SS'),'AST','PST')"NewDateandTime"
FROMDUAL

ALTERSESSIONSETNLS_DATE_FORMAT='DDMONYYYY'

NEXT_DAY
Dateofnextspecifieddate NEXT_DAY(<date>,<dayoftheweek>)
followingadate
OptionsareSUN,MON,TUE,WED,THU,FRI,andSAT

http://psoug.org/reference/date_func.html 3/8
5/24/2017 Oracle/PLSQLDateFunctions

PSOUGHome CodeSnippets SELECTNEXT_DAY(SYSDATE,'FRI')FROMDUAL


OracleLookup OracleReference OracleErrorCodes OracleFunctions PSOUGForum


ROUND
Returnsdateroundedtotheunit ROUND(<date_value>,<format>)
specifiedbytheformatmodel.If
youomittheformat,thedateis SELECTROUND(TO_DATE('27OCT00'),'YEAR')NEW_YEAR
roundedtothenearestday FROMDUAL

SpelledOutUsingTO_CHAR
DDSP HH24SP MISP MMSP SSSP
SpelledDemo
SELECTTO_CHAR(TO_DATE('10:30:18','HH24:MI:SS'),
'HH24SP:MISP:SSSP')
FROMDUAL

SELECTTO_CHAR(TO_DATE('01JAN2008','DDMONYYYY'),'DDSP
MONTHYYYYSP')
FROMDUAL

SELECTTO_CHAR(TO_DATE('01JAN2008','DDMMYYYY'),'DDSP
MMSPYYYYSP')
FROMDUAL

SELECTTO_CHAR(TO_DATE(sal,'J'),'JSP')
FROMemp

SYSDATE
Returnsthecurrentdateandtime SYSDATE
setfortheoperatingsystemon
whichthedatabaseresides SELECTSYSDATEFROMDUAL

TO_DATE
TO_DATE(<string1>,[format_mask],[nls_language])
InOracle/PLSQL,theto_date
string1isthestringthatwillbeconvertedtoadate.
functionconvertsastringtoa
date. Theformat_maskparameterisoptional.Itistheformatthatwillbeusedtoconvertstring1toadate.

nls_languageisoptional.Thenls_languageparametersetsthedefaultlanguageofthedatabase.This
languageisusedformessages,dayandmonthnames,symbolsforAD,BC,a.m.,andp.m.,andthe
defaultsortingmechanism.Thisparameteralsodeterminesthedefaultvaluesoftheparameters
NLS_DATE_LANGUAGEandNLS_SORT.

Thefollowingtableshowsoptionsfortheformat_maskparameter.Theseparameterscanbeusedin
variouscombinations.

Parameter Explanation
YEAR Year,spelledoutalphabetically
YYYY 4digityear
YYY
YY Last3,2,or1digit(s)ofyear.
Y
IYY
IY Last3,2,or1digit(s)ofISOyear.
I
IYYY 4digityearbasedontheISOstandard
Acceptsa2digityearandreturnsa4digityear.
RRRR Avaluebetween049willreturna20xxyear.
Avaluebetween5099willreturna19xxyear.
Q Quarterofyear(1,2,3,4JANMAR=1).
MM Month(0112JAN=01).
MON Abbreviatednameofthemonth.
MONTH Thenameofmonth,paddedwithblankstolengthof9characters.
RM Romannumeralmonth(IXIIJAN=I).
Theweekoftheyear(153)whereweek1startsonthefirstday
WW
oftheyearandcontinuestotheseventhdayoftheyear.
Theweekofthemonth(15)whereweek1startsonthefirstday
W
ofthemonthandendsontheseventh.

http://psoug.org/reference/date_func.html 4/8
5/24/2017 Oracle/PLSQLDateFunctions

PSOUGHome CodeSnippets OracleLookup IWOracleReference


Theweekofyear(152or153)basedontheISOstandard.
OracleErrorCodes OracleFunctions PSOUGForum
Dayoftheweek(17).Sundayisday1whennls_territoryisset
to'AMERICA'butdiffersifanothernls_territoryisset(i.e.
D
'UNITEDKINGDOM'or'GERMANY'inthesecasesMondayis
1.
DAY Nameoftheday.
DD Thedayofmonth(131).
DDD Thedayofyear(1366).
DY Abbreviatednameoftheday.(Mon,Tue,Wed,etc)
J JuliandaythenumberofdayssinceJanuary1,4712BC.
HH Hourofday(112).
HH12 Hourofday(112).
HH24 Hourofday(023).
MI Minute(059).
SS Second(059).
SSSSS Numberofsecondspastmidnight(086399).
Fractionalseconds.Useavaluefrom1to9afterFFtoindicate
FF
thenumberofdigitsinthefractionalseconds.Forexample,'FF5'.
AM,A.M.,PM,
Meridianindicator
orP.M.
ADorA.D ADindicator
BCorB.C. BCindicator
TZD Daylightsavingsidentifier.Forexample,'PST'
TZH Timezonehour.
TZM Timezoneminute.
TZR Timezoneregion.

TRUNC
TRUNC(<date_time>)
Convertadatetothedateat
CREATETABLEt(
midnight
datecolDATE)

INSERTINTOt(datecol)VALUES(SYSDATE)

INSERTINTOt(datecol)VALUES(TRUNC(SYSDATE))

INSERTINTOt(datecol)VALUES(TRUNC(SYSDATE,'HH'))

INSERTINTOt(datecol)VALUES(TRUNC(SYSDATE,'MI'))

COMMIT

SELECTTO_CHAR(datecol,'DDMONYYYYHH:MI:SS')
FROMt
TRUNC(<date_time>,'<format>')
Selectivelyremovepartofthe
SELECTTO_CHAR(SYSDATE,'DDMONYYYYHH:MI:SS')
dateinformation
FROMDUAL
SpecialthankstoDaveHayesfor
remindingmeofthis.
firstdayofthemonth
SELECTTO_CHAR(TRUNC(SYSDATE,'MM'),'DDMONYYYYHH:MI:SS')
FROMDUAL

SELECTTO_CHAR(TRUNC(SYSDATE,'MON'),'DDMONYYYYHH:MI:SS')
FROMDUAL

SELECTTO_CHAR(TRUNC(SYSDATE,'MONTH'),'DDMONYYYYHH:MI:SS')
FROMDUAL

Probablythemostefficientwayto
getthefirstdayofthemonth:
SELECTTRUNC(SYSDATE,'MONTH')FROMDUAL

firstdayoftheyear
SELECTTO_CHAR(TRUNC(SYSDATE,'YYYY'),'DDMONYYYYHH:MI:SS')

http://psoug.org/reference/date_func.html 5/8
5/24/2017 Oracle/PLSQLDateFunctions

PSOUGHome CodeSnippets FROMDUAL


OracleLookup OracleReference OracleErrorCodes OracleFunctions PSOUGForum

SELECTTO_CHAR(TRUNC(SYSDATE,'YEAR'),'DDMONYYYYHH:MI:SS')
FROMDUAL
SELECTSYSDATEFROMDUAL
DatesinWHEREClauseJoins
ALTERSESSIONSETNLS_DATE_FORMAT='DDMONYYYYHH24:MI:SS'

SELECTSYSDATEFROMDUAL

ALTERSESSIONSETNLS_DATE_FORMAT='DDMONYYYY'

CREATETABLEt(
datecolDATE)

INSERTINTOt
(datecol)
VALUES
(SYSDATE)

SELECT*FROMt

ALTERSESSIONSETNLS_DATE_FORMAT='DDMONYYYYHH24:MI:SS'

SELECT*FROMt

ALTERSESSIONSETNLS_DATE_FORMAT='DDMONYYYY'

SELECT*FROMt

SELECTSYSDATEFROMDUAL

SELECT*FROMt
WHEREdatecol=SYSDATE

ALTERSESSIONSETNLS_DATE_FORMAT='DDMONYYYYHH24:MI:SS'

SELECT*FROMt

SELECTSYSDATEFROMDUAL

SELECTTRUNC(SYSDATE)FROMDUAL

SELECT*FROMt
WHERETRUNC(datecol)=TRUNC(SYSDATE)

ALTERSESSIONSETNLS_DATE_FORMAT='DDMONYYYY'

VSIZE
ReturnsTheNumberOfBytes VSIZE(eINDATE)RETURNNUMBER
RequiredByAValue SELECTVSIZE(SYSDATE)FROMDUAL

DateCalculations
CREATEORREPLACEFUNCTIONbusiness_date(start_dateDATE,
ReturnsADayASpecified Days2AddNUMBER)RETURNDATEIS
NumberOfDaysInTheFuture CounterNATURAL:=0
SkippingWeekends CurDateDATE:=start_date
DayNumPOSITIVE
SkipCntrNATURAL:=0
BEGIN
WHILECounter<Days2AddLOOP
CurDate:=CurDate+1

http://psoug.org/reference/date_func.html 6/8
5/24/2017 Oracle/PLSQLDateFunctions

PSOUGHome CodeSnippets DayNum:=TO_CHAR(CurDate,'D')


OracleLookup OracleReference OracleErrorCodes OracleFunctions PSOUGForum

IFDayNumBETWEEN2AND6THEN
Counter:=Counter+1
ELSE
SkipCntr:=SkipCntr+1
ENDIF
ENDLOOP
RETURNstart_date+Counter+SkipCntr
ENDbusiness_date
/
CREATEORREPLACEFUNCTIONbusiness_date(start_dateDATE,
BusinessDatefunction,above, days2addNUMBER)RETURNDATEIS
enhancedbyLarryBentonto CounterNATURAL:=0
handlenegativevaluesforthe CurDateDATE:=start_date
days2addparameter. DayNumPOSITIVE
SkipCntrNATURAL:=0
DirectionINTEGER:=1daysafterstart_date
BusinessDaysNUMBER:=Days2Add
BEGIN
IFDays2Add<0THEN
Direction:=1daysbeforestart_date
BusinessDays:=(1)*BusinessDays
ENDIF

WHILECounter<BusinessDaysLOOP
CurDate:=CurDate+Direction
DayNum:=TO_CHAR(CurDate,'D')

IFDayNumBETWEEN2AND6THEN
Counter:=Counter+1
ELSE
SkipCntr:=SkipCntr+1
ENDIF
ENDLOOP

RETURNstart_date+(Direction*(Counter+SkipCntr))
ENDbusiness_date
/
CREATEORREPLACEFUNCTIONfday_ofmonth(value_inDATE)
ReturnsTheFirstDayOfAMonth RETURNDATEIS
vMoVARCHAR2(2)
vYrVARCHAR2(4)
BEGIN
vMo:=TO_CHAR(value_in,'MM')
vYr:=TO_CHAR(value_in,'YYYY')
RETURNTO_DATE(vMo||'01'||vYr,'MMDDYYYY')
EXCEPTION
WHENOTHERSTHEN
RETURNTO_DATE('01011900','MMDDYYYY')
ENDfday_ofmonth
/

TimeCalculations
CREATEORREPLACEFUNCTIONtime_diff(
ReturnsTheNumberOfSeconds DATE_1INDATE,DATE_2INDATE)RETURNNUMBERIS
BetweenTwoDateTimeValues
NDATE_1NUMBER
NDATE_2NUMBER
NSECOND_1NUMBER(5,0)
NSECOND_2NUMBER(5,0)

BEGIN
GetJuliandatenumberfromfirstdate(DATE_1)
NDATE_1:=TO_NUMBER(TO_CHAR(DATE_1,'J'))

GetJuliandatenumberfromseconddate(DATE_2)

http://psoug.org/reference/date_func.html 7/8
5/24/2017 Oracle/PLSQLDateFunctions

PSOUGHome CodeSnippets NDATE_2:=TO_NUMBER(TO_CHAR(DATE_2,'J'))


OracleLookup OracleReference OracleErrorCodes OracleFunctions PSOUGForum

Getsecondssincemidnightfromfirstdate(DATE_1)
NSECOND_1:=TO_NUMBER(TO_CHAR(DATE_1,'SSSSS'))

Getsecondssincemidnightfromseconddate(DATE_2)
NSECOND_2:=TO_NUMBER(TO_CHAR(DATE_2,'SSSSS'))

RETURN(((NDATE_2NDATE_1)*86400)+(NSECOND_2
NSECOND_1))
ENDtime_diff
/
SELECTDECODE(FLOOR(999999/86400),0,'',
Calculatingtimefromseconds
FLOOR(999999/86400)||'day(s),')||
TO_CHAR(TO_DATE(MOD(999999,86400),'SSSSS'),'HH24:MI:SS')
PostedbyJohnK.Hinsdale
12/30/06toc.d.o.misc
ASelapsed
FROMDUAL
ALTERSESSIONSETNLS_DATE_FORMAT='DDMONYYYYHH24:MI:SS'
Obtaincountspertenminute
increment SELECTTRUNC(SYSDATE)+dbms_random.value(0,86400)/86400
FROMDUAL
PostedbyMicheleCadot CONNECTBYLEVEL<=10
03/09/08toc.d.o.misc
WITHdataAS(
SELECTTRUNC(SYSDATE)+dbms_random.value(0,86400)/86400h
FROMDUAL
CONNECTBYLEVEL<=10)
SELECTTO_CHAR(h,'DD/MM/YYYYHH24:MI:SS')h,TO_CHAR(TRUNC(h)
+TRUNC(TO_CHAR(h,'SSSSS')/600)/144,'DD/MM/YYYYHH24:MI:SS')
"10m"
FROMdata
ORDERBYh

RelatedTopics
Cast
ConversionFunctions
MiscellaneousFunctions
NumericFunctions
StringFunctions
Timestamp

Home:CodeLibrary:Sponsors:Privacy:TermsofUse:ContactUs [130usersonline]2010psoug.org

http://psoug.org/reference/date_func.html 8/8

You might also like