4 Oracle Developer Data Types Essentials m4 Slides
4 Oracle Developer Data Types Essentials m4 Slides
David Berry
http://buildingbettersoftware.blogspot.com/
Storing Date and Time Data
Personal data
• Date of birth
• Hire date
Recording an event
• When an order was received
• When a user logged in
SELECT
TO_CHAR(msg_time_as_date, 'YYYY-MM-DD HH24:MI:SS') as msg_time_date,
TO_CHAR(msg_time_as_timestamp, 'MONTH DD, YYYY HH24:MI')
AS msg_time_timestamp,
message
FROM log_messages;
Code Description
YYYY Four digit year (e.g. 2014)
Code Description
HH24 Hour of day – 24 hour format (0 – 23)
MI Minutes
SS Seconds
Code Description
Q Quarter (1-4) of the year
SELECT
appointment_with
TO_CHAR(appointment_time, 'MONTH DD, YYYY “at” HH24:MI') AS appointment_time
FROM appointments;
APPOINTMENT_WITH APPOINTMENT_TIME
------------------- -----------------------------
Bill Clinton NOVEMBER 29, 2014 at 10:00
George W Bush NOVEMBER 29, 2014 at 11:30
Barack Obama NOVEMBER 29, 2014 at 13:00
EXTRACT Function
Syntax
EXTRACT (<component> FROM <date or timestamp>)
Example
SELECT
EXTRACT (year FROM systimestamp) AS year,
EXTRACT (month FROM systimestamp) AS month,
EXTRACT (day FROM systimestamp) AS day,
EXTRACT (hour FROM systimestamp) AS hour,
EXTRACT (minute FROM systimestamp) AS minute,
EXTRACT (second FROM systimestamp) AS second
FROM dual;
Function Description
SYSDATE Current date/time on the Oracle server (server time zone)
SELECT *
FROM log_messages
WHERE message_time >= DATE ‘2014-11-15’
AND message_time <= DATE ‘2014-11-22’
Specifying Date Literals – TO_DATE() Function
SELECT *
FROM log_messages
WHERE message_time >=
TO_DATE(‘2014-11-15 17:00’, ‘YYYY-MM-DD HH24:MI’)
AND message_time <=
TO_DATE(‘2014-11-15 18:30’, ‘YYYY-MM-DD HH24:MI’)
Timestamp Literals
SELECT *
FROM log_messages
WHERE message_time >= TIMESTAMP ‘2014-11-15 17:00:00.000000’
AND message_time <= TIMESTAMP ‘2014-11-15’ 17:10:30.500000’;
Timestamp Literals with Time Zone
SELECT *
FROM log_messages
WHERE message_time >=
TIMESTAMP ‘2014-11-15 17:00:00.000000 -06:00’;
SELECT *
FROM log_messages
WHERE message_time >=
TIMESTAMP ‘2014-08-01 17:00:00.000000 America/Chicago’;
Time Zone Names
Standardized database
http://en.wikipedia.org/wiki/Tz_database
of time zones
Use of Date/Time Literal Strings
To change setting
ALTER SESSION SET parameter_name = new_value
for a session
Important NLS Settings
Setting Description
NLS_DATE_FORMAT Default formatting of date values
SELECT
TO_CHAR(TRUNC(sysdate), ‘YYYY-MM-DD HH24:MI:SS’) AS MY_DATE
FROM DUAL;
MY_DATE
--------------------
2014-11-29 00:00:00
LAST_DAY() Function
Purpose: Find the last day of the current month the date is in
SELECT
LAST_DAY(TO_DATE(‘2014-07-15 17:00’), ‘YYYY-MM-DD HH24:MI’))
AS MY_DATE
FROM DUAL;
MY_DATE
--------------------
2014-07-31 17:00
Purpose: Find the next named weekday following the given date
SELECT
NEXT_DAY(TO_DATE('2014-07-15 8:00', 'YYYY-MM-DD HH24:MI'),
'FRIDAY') AS MY_DATE
FROM DUAL;
MY_DATE
--------------------
2014-07-18 8:00
To add or subtract days, just add or subtract that number from the DATE or
TIMESTAMP value
SELECT
ADD_MONTHS(DATE '2012-02-01', 12) AS twelve_months_added,
DATE '2012-02-01' + 365 AS added_365_days
FROM DUAL;
TWELVE_MONTHS_ADDED ADDED_365_DAYS
-------------------- -----------------
2013-02-01 2013-01-31
DIFF
-----------
15.25
DIFF
-----------
+00 00:23:45.770000
Months Between
MONTHS_DIFFERENT
-------------------
28.4838709677419
Calculating the Months Between Two Dates
SELECT
MONTHS_BETWEEN (DATE '2014-4-08', DATE '2001-08-24') AS DIFF
FROM DUAL;
DIFF
--------------------
151.483870967742
Example
INSERT INTO employment_experience
(experience_id, candidate_id, company_name, title,
start_date, employment_length)
VALUES
(12345, 100, ‘Pluralsight’, ‘Software Developer’
DATE ‘2010-07-15’,
INTERVAL '4-3' YEAR(2) TO MONTH);
Syntax for INTERVAL YEAR TO MONTH Data Type
Example
INSERT INTO space_missions
(mission_id, name, mission_start, time_in_space)
VALUES
(12345, ‘Valeri Polyakov’, DATE ‘1994-01-09’,
INTERVAL '437 17:38:00’ DAY(3) TO SECOND(0) );
Module Summary