Oracle Date Functions Cheat Sheet - TO_DATE, SYSDATE & Date Arithmetic
Oracle Date Functions Cheat Sheet
Section titled “Oracle Date Functions Cheat Sheet”Quick reference for Oracle date and timestamp functions with examples.
Current Date/Time Functions
Section titled “Current Date/Time Functions”-- Current date and timeSELECT SYSDATE FROM DUAL; -- Database server date/timeSELECT CURRENT_DATE FROM DUAL; -- Session timezone dateSELECT SYSTIMESTAMP FROM DUAL; -- Database timestamp with timezoneSELECT CURRENT_TIMESTAMP FROM DUAL; -- Session timestamp with timezoneSELECT LOCALTIMESTAMP FROM DUAL; -- Session timestamp without timezone
-- Database timezoneSELECT DBTIMEZONE FROM DUAL;SELECT SESSIONTIMEZONE FROM DUAL;Date Format Models
Section titled “Date Format Models”Common Format Elements
Section titled “Common Format Elements”| Element | Description | Example |
|---|---|---|
| YYYY | 4-digit year | 2024 |
| YY | 2-digit year | 24 |
| MM | Month (01-12) | 03 |
| MON | Abbreviated month | MAR |
| MONTH | Full month name | MARCH |
| DD | Day of month (01-31) | 15 |
| DY | Abbreviated day | FRI |
| DAY | Full day name | FRIDAY |
| HH24 | Hour (00-23) | 14 |
| HH | Hour (01-12) | 02 |
| MI | Minutes (00-59) | 30 |
| SS | Seconds (00-59) | 45 |
| AM/PM | Meridian indicator | PM |
| D | Day of week (1-7) | 6 |
| DDD | Day of year (1-366) | 074 |
| WW | Week of year (1-53) | 11 |
| Q | Quarter (1-4) | 1 |
TO_DATE Function
Section titled “TO_DATE Function”Convert string to date
-- Basic conversionSELECT TO_DATE('2024-03-15', 'YYYY-MM-DD') FROM DUAL;
-- With timeSELECT TO_DATE('2024-03-15 14:30:00', 'YYYY-MM-DD HH24:MI:SS') FROM DUAL;
-- Common formatsSELECT TO_DATE('15-MAR-2024', 'DD-MON-YYYY') FROM DUAL;SELECT TO_DATE('03/15/2024', 'MM/DD/YYYY') FROM DUAL;SELECT TO_DATE('March 15, 2024', 'MONTH DD, YYYY') FROM DUAL;TO_CHAR Function
Section titled “TO_CHAR Function”Convert date to string
-- Format dateSELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD') FROM DUAL; -- 2024-03-15SELECT TO_CHAR(SYSDATE, 'DD-MON-YYYY') FROM DUAL; -- 15-MAR-2024SELECT TO_CHAR(SYSDATE, 'Day, Month DD, YYYY') FROM DUAL; -- Friday, March 15, 2024
-- With timeSELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS') FROM DUAL;SELECT TO_CHAR(SYSDATE, 'HH:MI:SS AM') FROM DUAL;
-- Day and week infoSELECT TO_CHAR(SYSDATE, 'DAY') FROM DUAL; -- FRIDAYSELECT TO_CHAR(SYSDATE, 'DY') FROM DUAL; -- FRISELECT TO_CHAR(SYSDATE, 'D') FROM DUAL; -- Day numberSELECT TO_CHAR(SYSDATE, 'WW') FROM DUAL; -- Week numberSELECT TO_CHAR(SYSDATE, 'Q') FROM DUAL; -- QuarterDate Arithmetic
Section titled “Date Arithmetic”Adding/Subtracting Days
Section titled “Adding/Subtracting Days”-- Add daysSELECT SYSDATE + 7 FROM DUAL; -- 7 days from nowSELECT SYSDATE - 30 FROM DUAL; -- 30 days ago
-- Add hours/minutes/secondsSELECT SYSDATE + 1/24 FROM DUAL; -- 1 hour from nowSELECT SYSDATE + 30/1440 FROM DUAL; -- 30 minutes from nowSELECT SYSDATE + 45/86400 FROM DUAL; -- 45 seconds from nowADD_MONTHS Function
Section titled “ADD_MONTHS Function”-- Add monthsSELECT ADD_MONTHS(SYSDATE, 1) FROM DUAL; -- 1 month from nowSELECT ADD_MONTHS(SYSDATE, -3) FROM DUAL; -- 3 months agoSELECT ADD_MONTHS(SYSDATE, 12) FROM DUAL; -- 1 year from nowMONTHS_BETWEEN Function
Section titled “MONTHS_BETWEEN Function”-- Calculate months between datesSELECT MONTHS_BETWEEN(SYSDATE, DATE '2024-01-01') FROM DUAL;SELECT MONTHS_BETWEEN(DATE '2024-12-31', DATE '2024-01-01') FROM DUAL; -- 11.968...Days Between Dates
Section titled “Days Between Dates”-- Calculate days betweenSELECT SYSDATE - DATE '2024-01-01' FROM DUAL;SELECT DATE '2024-12-31' - DATE '2024-01-01' FROM DUAL; -- 365Date Truncation & Rounding
Section titled “Date Truncation & Rounding”TRUNC Function
Section titled “TRUNC Function”-- Truncate to start of periodSELECT TRUNC(SYSDATE) FROM DUAL; -- Start of today (midnight)SELECT TRUNC(SYSDATE, 'MM') FROM DUAL; -- First of current monthSELECT TRUNC(SYSDATE, 'YYYY') FROM DUAL; -- First of current yearSELECT TRUNC(SYSDATE, 'Q') FROM DUAL; -- First of current quarterSELECT TRUNC(SYSDATE, 'WW') FROM DUAL; -- Start of current weekSELECT TRUNC(SYSDATE, 'HH24') FROM DUAL; -- Start of current hourROUND Function
Section titled “ROUND Function”-- Round to nearest periodSELECT ROUND(SYSDATE) FROM DUAL; -- Nearest daySELECT ROUND(SYSDATE, 'MM') FROM DUAL; -- Nearest monthSELECT ROUND(SYSDATE, 'YYYY') FROM DUAL; -- Nearest yearFirst/Last Day Functions
Section titled “First/Last Day Functions”-- Last day of monthSELECT LAST_DAY(SYSDATE) FROM DUAL;SELECT LAST_DAY(DATE '2024-02-01') FROM DUAL; -- 2024-02-29 (leap year)
-- First day of monthSELECT TRUNC(SYSDATE, 'MM') FROM DUAL;
-- First day of yearSELECT TRUNC(SYSDATE, 'YYYY') FROM DUAL;NEXT_DAY Function
Section titled “NEXT_DAY Function”-- Next occurrence of daySELECT NEXT_DAY(SYSDATE, 'MONDAY') FROM DUAL;SELECT NEXT_DAY(SYSDATE, 'FRIDAY') FROM DUAL;SELECT NEXT_DAY(SYSDATE, 1) FROM DUAL; -- 1=Sunday, 2=Monday, etc.EXTRACT Function
Section titled “EXTRACT Function”-- Extract date componentsSELECT EXTRACT(YEAR FROM SYSDATE) FROM DUAL;SELECT EXTRACT(MONTH FROM SYSDATE) FROM DUAL;SELECT EXTRACT(DAY FROM SYSDATE) FROM DUAL;
-- From timestampSELECT EXTRACT(HOUR FROM SYSTIMESTAMP) FROM DUAL;SELECT EXTRACT(MINUTE FROM SYSTIMESTAMP) FROM DUAL;SELECT EXTRACT(SECOND FROM SYSTIMESTAMP) FROM DUAL;Timestamp Functions
Section titled “Timestamp Functions”NUMTODSINTERVAL & NUMTOYMINTERVAL
Section titled “NUMTODSINTERVAL & NUMTOYMINTERVAL”-- Add intervalsSELECT SYSDATE + NUMTODSINTERVAL(5, 'HOUR') FROM DUAL;SELECT SYSDATE + NUMTODSINTERVAL(30, 'MINUTE') FROM DUAL;SELECT SYSDATE + NUMTOYMINTERVAL(6, 'MONTH') FROM DUAL;Timestamp Arithmetic
Section titled “Timestamp Arithmetic”-- Timestamp differencesSELECT SYSTIMESTAMP - TIMESTAMP '2024-01-01 00:00:00' FROM DUAL;
-- Convert interval to daysSELECT EXTRACT(DAY FROM (SYSTIMESTAMP - TIMESTAMP '2024-01-01 00:00:00')) FROM DUAL;Timestamp Conversion
Section titled “Timestamp Conversion”-- Cast between typesSELECT CAST(SYSDATE AS TIMESTAMP) FROM DUAL;SELECT CAST(SYSTIMESTAMP AS DATE) FROM DUAL;
-- With timezoneSELECT FROM_TZ(CAST(SYSDATE AS TIMESTAMP), 'America/New_York') FROM DUAL;SELECT SYS_EXTRACT_UTC(SYSTIMESTAMP) FROM DUAL;Common Date Queries
Section titled “Common Date Queries”Start/End of Periods
Section titled “Start/End of Periods”-- TodaySELECT TRUNC(SYSDATE) AS today_start, TRUNC(SYSDATE) + 1 - 1/86400 AS today_endFROM DUAL;
-- This week (Sunday to Saturday)SELECT TRUNC(SYSDATE, 'WW') AS week_start, TRUNC(SYSDATE, 'WW') + 7 - 1/86400 AS week_endFROM DUAL;
-- This monthSELECT TRUNC(SYSDATE, 'MM') AS month_start, LAST_DAY(SYSDATE) + 1 - 1/86400 AS month_endFROM DUAL;
-- This quarterSELECT TRUNC(SYSDATE, 'Q') AS quarter_start, ADD_MONTHS(TRUNC(SYSDATE, 'Q'), 3) - 1/86400 AS quarter_endFROM DUAL;
-- This yearSELECT TRUNC(SYSDATE, 'YYYY') AS year_start, ADD_MONTHS(TRUNC(SYSDATE, 'YYYY'), 12) - 1/86400 AS year_endFROM DUAL;Business Day Calculations
Section titled “Business Day Calculations”-- Is it a weekday?SELECT CASE WHEN TO_CHAR(SYSDATE, 'DY') NOT IN ('SAT', 'SUN') THEN 'Weekday' ELSE 'Weekend' ENDFROM DUAL;
-- Next business daySELECT CASE TO_CHAR(SYSDATE, 'DY') WHEN 'FRI' THEN SYSDATE + 3 WHEN 'SAT' THEN SYSDATE + 2 ELSE SYSDATE + 1 END AS next_business_dayFROM DUAL;Age Calculation
Section titled “Age Calculation”-- Years between datesSELECT FLOOR(MONTHS_BETWEEN(SYSDATE, DATE '1990-05-15') / 12) AS ageFROM DUAL;
-- Detailed ageSELECT FLOOR(MONTHS_BETWEEN(SYSDATE, DATE '1990-05-15') / 12) AS years, MOD(FLOOR(MONTHS_BETWEEN(SYSDATE, DATE '1990-05-15')), 12) AS monthsFROM DUAL;Date Format Error Prevention
Section titled “Date Format Error Prevention”-- Safe date parsingSELECT TO_DATE('2024-13-01', 'YYYY-MM-DD' DEFAULT NULL ON CONVERSION ERROR) FROM DUAL;
-- Validate date formatSELECT CASE WHEN REGEXP_LIKE(date_col, '^\d{4}-\d{2}-\d{2}$') THEN TO_DATE(date_col, 'YYYY-MM-DD') ENDFROM your_table;Related Errors
Section titled “Related Errors”- ORA-01830: Date Format Picture Ends
- ORA-01843: Not a Valid Month
- ORA-01861: Literal Does Not Match Format