In Oracle a DATE
data type does not have a format; when Oracle sends a DATE
to the client program (SQL/Plus, SQL/Developer, Toad, Java, Python, etc) it will send 7- or 8- bytes which represent the date.
A DATE
which is not stored in a table (i.e. generated by SYSDATE
and having "type 13" when using the DUMP()
command) has 8-bytes and has the structure (the numbers on the right are the internal representation of 2012-11-26 16:41:09
):
BYTE VALUE EXAMPLE
---- ------------------------------- --------------------------------------
1 Year modulo 256 220
2 Year multiples of 256 7 (7 * 256 + 220 = 2012)
3 Month 11
4 Day 26
5 Hours 16
6 Minutes 41
7 Seconds 9
8 Unused 0
A DATE
which is stored in a table ("type 12" when using the DUMP()
command) has 7-bytes and has the structure (the numbers on the right are the internal representation of 2012-11-26 16:41:09
):
BYTE VALUE EXAMPLE
---- ------------------------------- --------------------------------------
1 ( Year multiples of 100 ) + 100 120
2 ( Year modulo 100 ) + 100 112 ((120-100)*100 + (112-100) = 2012)
3 Month 11
4 Day 26
5 Hours + 1 17
6 Minutes + 1 42
7 Seconds + 1 10
If you want the date to have a specific format then you will need to convert it to something that has a format (i.e. a string). The SQL client may implicitly do this or you can explicitly convert the value to a string using TO_CHAR( date, format_model, nls_params )
.