The date_format_spec
clause is used to indicate that a character string field contains date data, time data, or both, in a specific format. This information is used only when a character field is converted to a date or time data type and only when a character string field is mapped into a date column.
For detailed information about the correct way to specify date and time formats, see Oracle Database SQL Language Reference.
The syntax for the date_format_spec
clause is as follows:
The MASK
clause is used to override the default globalization format mask for the data type. If a date mask is not specified, then the settings of NLS parameters for the database (not the session settings) for the appropriate globalization parameter for the data type are used. The NLS_DATABASE_PARAMETERS
view shows these settings.
NLS_DATE_FORMAT
for DATE
data types
NLS_TIMESTAMP_FORMAT
for TIMESTAMP
data types
NLS_TIMESTAMP_TZ_FORMAT
for TIMESTAMP
WITH
TIME
ZONE
data types
Please note the following:
The database setting for the NLS_NUMERIC_CHARACTERS
initialization parameter (that is, from the NLS_DATABASE_PARAMETERS
view) governs the decimal separator for implicit conversion from character to numeric data types.
A group separator is not allowed in the default format.
The INTERVAL
clause indicates that a field contains a formatted interval. The type of interval can be either YEAR
TO
MONTH
or DAY
TO
SECOND
.
The following example shows a sample use of a complex DATE
character string and a TIMESTAMP
character string. It is followed by a sample of the data file that can be used to load it.
SQL> CREATE TABLE emp_load 2 (employee_number CHAR(5), 3 employee_dob CHAR(20), 4 employee_last_name CHAR(20), 5 employee_first_name CHAR(15), 6 employee_middle_name CHAR(15), 7 employee_hire_date DATE, 8 rec_creation_date TIMESTAMP WITH TIME ZONE) 9 ORGANIZATION EXTERNAL 10 (TYPE ORACLE_LOADER 11 DEFAULT DIRECTORY def_dir1 12 ACCESS PARAMETERS 13 (RECORDS DELIMITED BY NEWLINE 14 FIELDS (employee_number CHAR(2), 15 employee_dob CHAR(20), 16 employee_last_name CHAR(18), 17 employee_first_name CHAR(11), 18 employee_middle_name CHAR(11), 19 employee_hire_date CHAR(22) date_format DATE mask "mm/dd/yyyy hh:mi:ss AM", 20 rec_creation_date CHAR(35) date_format TIMESTAMP WITH TIME ZONE mask "DD-MON-RR HH.MI.SSXFF AM TZH:TZM" 21 ) 22 ) 23 LOCATION ('infoc.dat') 24 ); Table created.
SQL> SELECT * FROM emp_load; EMPLO EMPLOYEE_DOB EMPLOYEE_LAST_NAME EMPLOYEE_FIRST_ EMPLOYEE_MIDDLE ----- -------------------- -------------------- --------------- --------------- EMPLOYEE_ --------- REC_CREATION_DATE --------------------------------------------------------------------------- 56 november, 15, 1980 baker mary alice 01-SEP-04 01-DEC-04 11.22.03.034567 AM -08:00 87 december, 20, 1970 roper lisa marie 01-JAN-02 01-DEC-02 02.03.00.678573 AM -08:00 2 rows selected.
The info.dat
file looks like the following. Note that this is 2 long records. There is one space between the data fields (09/01/2004
, 01/01/2002
) and the time field that follows.
56november, 15, 1980 baker mary alice 09/01/2004 08:23:01 AM01-DEC-04 11.22.03.034567 AM -08:00 87december, 20, 1970 roper lisa marie 01/01/2002 02:44:55 PM01-DEC-02 02.03.00.678573 AM -08:00