Oracle9i SQL Reference
Release 1 (9.0.1)

Part Number A90125-01
Go To Documentation Library
Home
Go To Product List
Book List
Go To Table Of Contents
Contents
Go To Index
Index

Master Index

Feedback

Go to previous page Go to beginning of chapter Go to next page

Basic Elements of Oracle SQL, 4 of 10


Format Models

A format model is a character literal that describes the format of DATE or NUMBER data stored in a character string. When you convert a character string into a date or number, a format model tells Oracle how to interpret the string. In SQL statements, you can use a format model as an argument of the TO_CHAR and TO_DATE functions:

For example,

For lists of date and number format model elements, see Table 2-10, "Number Format Elements" and Table 2-12, " Datetime Format Elements".

The values of some formats are determined by the value of initialization parameters. For such formats, you can specify the characters returned by these format elements implicitly using the initialization parameter NLS_TERRITORY. You can change the default date format for your session with the ALTER SESSION statement.

See Also:

 
Format of Return Values: Examples

You can use a format model to specify the format for Oracle to use to return values from the database to you.

The following statement selects the salaries of the employees in Department 80 and uses the TO_CHAR function to convert these salaries into character values with the format specified by the number format model '$9,990.99':

SELECT last_name employee, TO_CHAR(salary, '$99,990.99')
   FROM employees
   WHERE department_id = 80;
 

Because of this format model, Oracle returns salaries with leading dollar signs, commas every three digits, and two decimal places.

The following statement selects the date on which each employee from Department 20 was hired and uses the TO_CHAR function to convert these dates to character strings with the format specified by the date format model 'fmMonth DD, YYYY':

SELECT last_name employee, 
    TO_CHAR(hire_date,'fmMonth DD, YYYY') hiredate
    FROM employees
    WHERE department_id = 20;

With this format model, Oracle returns the hire dates (as specified by "fm") without blank padding, two digits for the day, and the century included in the year.

See Also:

"Format Model Modifiers" for a description of the fm format element 

Supplying the Correct Format Model: Examples

When you insert or update a column value, the datatype of the value that you specify must correspond to the column's datatype. You can use format models to specify the format of a value that you are converting from one datatype to another datatype required for a column.

For example, a value that you insert into a DATE column must be a value of the DATE datatype or a character string in the default date format (Oracle implicitly converts character strings in the default date format to the DATE datatype). If the value is in another format, you must use the TO_DATE function to convert the value to the DATE datatype. You must also use a format model to specify the format of the character string.

The following statement updates Hunold's hire date using the TO_DATE function with the format mask 'YYYY MM DD' to convert the character string '1998 05 20' to a DATE value:

UPDATE employees 
  SET hire_date = TO_DATE('1998 05 20','YYYY MM DD') 
  WHERE last_name = 'Hunold'; 

This remainder of this section describes how to use:

Number Format Models

You can use number format models:

All number format models cause the number to be rounded to the specified number of significant digits. If a value has more significant digits to the left of the decimal place than are specified in the format, pound signs (#) replace the value. If a positive value is extremely large and cannot be represented in the specified format, then the infinity sign (~) replaces the value. Likewise, if a negative value is extremely small and cannot be represented by the specified format, then the negative infinity sign replaces the value (-~). This event typically occurs when you are using TO_CHAR with a restrictive number format string, causing a rounding operation.

Number Format Elements

A number format model is composed of one or more number format elements. Table 2-10 lists the elements of a number format model. Examples are shown in Table 2-11.

Negative return values automatically contain a leading negative sign and positive values automatically contain a leading space unless the format model contains the MI, S, or PR format element.

Table 2-10 Number Format Elements
Element  Example  Description 

, (comma) 

9,999 

Returns a comma in the specified position. You can specify multiple commas in a number format model.

Restrictions:

  • A comma element cannot begin a number format model.

  • A comma cannot appear to the right of a decimal character or period in a number format model.

 

. (period) 

99.99 

Returns a decimal point, which is a period (.) in the specified position.

Restriction: You can specify only one period in a number format model. 

$9999 

Returns value with a leading dollar sign. 

0999

9990 

Returns leading zeros.

Returns trailing zeros. 

9999 

Returns value with the specified number of digits with a leading space if positive or with a leading minus if negative.

Leading zeros are blank, except for a zero value, which returns a zero for the integer part of the fixed-point number. 

B9999 

Returns blanks for the integer part of a fixed-point number when the integer part is zero (regardless of "0"s in the format model). 

C999 

Returns in the specified position the ISO currency symbol (the current value of the NLS_ISO_CURRENCY parameter). 

99D99 

Returns in the specified position the decimal character, which is the current value of the NLS_NUMERIC_CHARACTER parameter. The default is a period (.).

Restriction: You can specify only one decimal character in a number format model. 

EEEE 

9.9EEEE 

Returns a value using in scientific notation. 

FM 

FM90.9 

Returns a value with no leading or trailing blanks. 

9G999 

Returns in the specified position the group separator (the current value of the NLS_NUMERIC_CHARACTER parameter). You can specify multiple group separators in a number format model.

Restriction: A group separator cannot appear to the right of a decimal character or period in a number format model. 

L999 

Returns in the specified position the local currency symbol (the current value of the NLS_CURRENCY parameter). 

MI 

9999MI 

Returns negative value with a trailing minus sign (-).

Returns positive value with a trailing blank.

Restriction: The MI format element can appear only in the last position of a number format model.  

PR 

9999PR 

Returns negative value in <angle brackets>.

Returns positive value with a leading and trailing blank.

Restriction: The PR format element can appear only in the last position of a number format model.  

RN

rn 

RN

rn 

Returns a value as Roman numerals in uppercase.

Returns a value as Roman numerals in lowercase.

Value can be an integer between 1 and 3999. 

S9999

9999S 

Returns negative value with a leading minus sign (-).

Returns positive value with a leading plus sign (+).

Returns negative value with a trailing minus sign (-).

Returns positive value with a trailing plus sign (+).

Restriction: The S format element can appear only in the first or last position of a number format model. 

TM 

TM 

"Text minimum". Returns (in decimal output) the smallest number of characters possible. This element is case-insensitive.

The default is TM9, which returns the number in fixed notation unless the output exceeds 64 characters. If output exceeds 64 characters, Oracle automatically returns the number in scientific notation.

Restrictions:

  • You cannot precede this element with any other element.

  • You can follow this element only with 9 or E (only one) or e (only one).

 

U9999 

Returns in the specified position the "Euro" (or other) dual currency symbol (the current value of the NLS_DUAL_CURRENCY parameter). 

999V99 

Returns a value multiplied by 10n (and if necessary, round it up), where n is the number of 9's after the "V". 

XXXX

xxxx 

Returns the hexadecimal value of the specified number of digits. If the specified number is not an integer, Oracle rounds it to an integer.

Restrictions:

  • This element accepts only positive values or 0. Negative values return an error.

  • You can precede this element only with 0 (which returns leading zeroes) or FM. Any other elements return an error. If you specify neither 0 nor FM with X, the return always has 1 leading blank.

 

Table 2-11 shows the results of the following query for different values of number and 'fmt':

SELECT TO_CHAR(number, 'fmt')
   FROM DUAL;
Table 2-11 Results of Example Number Conversions  
number  'fmt'  Result 

-1234567890 

9999999999S 

'1234567890-' 

0 

99.99 

' .00' 

+0.1 

99.99 

' .10' 

-0.2 

99.99 

' -.20' 

0 

90.99 

' 0.00' 

+0.1 

90.99 

' 0.10' 

-0.2 

90.99 

' -0.20' 

0 

9999 

' 0' 

1 

9999 

' 1' 

0 

B9999 

' ' 

1 

B9999 

' 1' 

0 

B90.99 

' ' 

+123.456 

999.999 

' 123.456' 

-123.456 

999.999 

'-123.456' 

+123.456 

FM999.009 

'123.456' 

+123.456 

9.9EEEE 

' 1.2E+02' 

+1E+123 

9.9EEEE 

' 1.0E+123' 

+123.456 

FM9.9EEEE 

'1.2E+02' 

+123.45 

FM999.009 

'123.45' 

+123.0 

FM999.009 

'123.00' 

+123.45 

L999.99 

' $123.45' 

+123.45 

FML999.99 

'$123.45' 

+1234567890 

9999999999S 

'1234567890+' 

Date Format Models

You can use date format models:

The total length of a date format model cannot exceed 22 characters.

The default date format is specified either explicitly with the initialization parameter NLS_DATE_FORMAT or implicitly with the initialization parameter NLS_TERRITORY. You can change the default date format for your session with the ALTER SESSION statement.

See Also:

 

Date Format Elements

A date format model is composed of one or more datetime format elements as listed in Table 2-12.

Capitalization of Date Format Elements

Capitalization in a spelled-out word, abbreviation, or Roman numeral follows capitalization in the corresponding format element. For example, the date format model 'DAY' produces capitalized words like 'MONDAY'; 'Day' produces 'Monday'; and 'day' produces 'monday'.

Punctuation and Character Literals in Date Format Models

You can also include these characters in a date format model:

These characters appear in the return value in the same location as they appear in the format model.

Table 2-12  Datetime Format Elements

Element 

Specify in TO_* datetime functions?a 

Meaning 

-
/
,
.
;
:
"text"
 

Yes 

Punctuation and quoted text is reproduced in the result. 

AD
A.D.
 

Yes 

AD indicator with or without periods. 

AM
A.M.
 

Yes 

Meridian indicator with or without periods. 

BC
B.C.
 

Yes 

BC indicator with or without periods. 

CC
SCC
 

No 

One greater than the first two digits of a four-digit year; "S" prefixes BC dates with "-". For example, '20' from '1900'. 

D
 

Yes 

Day of week (1-7). 

DAY
 

Yes 

Name of day, padded with blanks to length of 9 characters. 

DD
 

Yes 

Day of month (1-31). 

DDD
 

Yes 

Day of year (1-366). 

DY
 

Yes 

Abbreviated name of day. 

E
 

No 

Abbreviated era name (Japanese Imperial, ROC Official, and Thai Buddha calendars). 

EE
 

No 

Full era name (Japanese Imperial, ROC Official, and Thai Buddha calendars). 

FF
 

 

Fractional seconds; no radix printed (see X format element below).

Example: 'HH:MI:SS.FF'

HH
 

Yes 

Hour of day (1-12). 

HH12
 

No 

Hour of day (1-12). 

HH24
 

Yes 

Hour of day (0-23). 

IW
 

No 

Week of year (1-52 or 1-53) based on the ISO standard. 

IYY
IY
I
 

No 

Last 3, 2, or 1 digit(s) of ISO year. 

IYYY
 

No 

4-digit year based on the ISO standard. 

J
 

Yes 

Julian day; the number of days since January 1, 4712 BC. Number specified with 'J' must be integers. 

MI
 

Yes 

Minute (0-59). 

MM
 

Yes 

Month (01-12; JAN = 01). 

MON
 

Yes 

Abbreviated name of month. 

MONTH
 

Yes 

Name of month, padded with blanks to length of 9 characters. 

PM
P.M.
 

No 

Meridian indicator with or without periods. 

Q
 

No 

Quarter of year (1, 2, 3, 4; JAN-MAR = 1). 

RM
 

Yes 

Roman numeral month (I-XII; JAN = I). 

RR
 

Yes 

Given a year with 2 digits:

  • If the year is <50 and the last 2 digits of the current year are >=50, the first 2 digits of the returned year are 1 greater than the first 2 digits of the current year.

  • If the year is >=50 and the last 2 digits of the current year are <50, the first 2 digits of the returned year are 1 less than the first 2 digits of the current year.

    See Also: Table 2-13

 
RRRR
 

Yes 

Round year. Accepts either 4-digit or 2-digit input. If 2-digit, provides the same return as RR. If you don't want this functionality, simply enter the 4-digit year. 

SS
 

Yes 

Second (0-59). 

SSSSS
 

Yes 

Seconds past midnight (0-86399). 

TZD
 

Yes 

Daylight savings information. The TZD value is an abbreviated time zone string with daylight savings information. It must correspond with the region specified in TZR.

Example: PST (for US/Pacific standard time); PDT (for US/Pacific daylight time). 

TZH
 

Yes 

Time zone hour. (See TZM format element below.)

Example: 'HH:MI:SS.FFTZH:TZM'

TZM
 

Yes 

Time zone minute. (See TZH format element above.)

Example: 'HH:MI:SS.FFTZH:TZM'

TZR
 

Yes 

Time zone region information. The value must be one of the time zone regions supported in the database.

Example: US/Pacific 

WW
 

No 

Week of year (1-53) where week 1 starts on the first day of the year and continues to the seventh day of the year. 

W
 

No 

Week of month (1-5) where week 1 starts on the first day of the month and ends on the seventh. 

X
 

 

Local radix character.

Example: 'HH:MI:SSXFF'

Y,YYY
 

Yes 

Year with comma in this position. 

YEAR
SYEAR
 

No 

Year, spelled out; "S" prefixes BC dates with "-". 

YYYY
SYYYY
 

Yes 

4-digit year; "S" prefixes BC dates with "-". 

YYY
YY
Y
 

Yes 

Last 3, 2, or 1 digit(s) of year. 

Oracle returns an error if an alphanumeric character is found in the date string where punctuation character is found in the format string. For example:

TO_CHAR (TO_DATE('0297','MM/YY'), 'MM/YY')

returns an error.

Date Format Elements and Globalization Support

The functionality of some datetime format elements depends on the country and language in which you are using Oracle. For example, these datetime format elements return spelled values:

The language in which these values are returned is specified either explicitly with the initialization parameter NLS_DATE_LANGUAGE or implicitly with the initialization parameter NLS_LANGUAGE. The values returned by the YEAR and SYEAR datetime format elements are always in English.

The datetime format element D returns the number of the day of the week (1-7). The day of the week that is numbered 1 is specified implicitly by the initialization parameter NLS_TERRITORY.

See Also:

Oracle9i Database Reference and Oracle9i Globalization Support Guide for information on Globalization Support initialization parameters 

ISO Standard Date Format Elements

Oracle calculates the values returned by the datetime format elements IYYY, IYY, IY, I, and IW according to the ISO standard. For information on the differences between these values and those returned by the datetime format elements YYYY, YYY, YY, Y, and WW, see the discussion of Globalization Support in Oracle9i Globalization Support Guide.

The RR Date Format Element

The RR datetime format element is similar to the YY datetime format element, but it provides additional flexibility for storing date values in other centuries. The RR datetime format element lets you store 21st century dates in the 20th century by specifying only the last two digits of the year. It will also allow you to store 20th century dates in the 21st century in the same way if necessary.

If you use the TO_DATE function with the YY datetime format element, the date value returned always has the same first 2 digits as the current year. If you use the RR datetime format element instead, the century of the return value varies according to the specified two-digit year and the last two digits of the current year. Table 2-13 summarizes the behavior of the RR datetime format element.

Table 2-13 The RR Date Element Format
 

If the specified two-digit year is 

 

0 - 49 

50 - 99 

If the last two digits of the current year are: 

0-49 

The return date has the same first 2 digits as the current date. 

The first 2 digits of the return date are 1 less than the first 2 digits of the current date. 

50-99 

The first 2 digits of the return date are 1 greater than the first 2 digits of the current date. 

The return date has the same first 2 digits as the current date. 

The following examples demonstrate the behavior of the RR datetime format element.

RR Date Format Examples

Assume these queries are issued between 1950 and 1999:

SELECT TO_CHAR(TO_DATE('27-OCT-98', 'DD-MON-RR') ,'YYYY') "Year"
     FROM DUAL;

Year
----
1998

SELECT TO_CHAR(TO_DATE('27-OCT-17', 'DD-MON-RR') ,'YYYY') "Year"
     FROM DUAL; 

Year
----
2017

Now assume these queries are issued between 2000 and 2049:

SELECT TO_CHAR(TO_DATE('27-OCT-98', 'DD-MON-RR') ,'YYYY') "Year"
  FROM DUAL; 

Year
----
1998 

SELECT TO_CHAR(TO_DATE('27-OCT-17', 'DD-MON-RR') ,'YYYY') "Year"
     FROM DUAL; 

Year
----
2017

Note that the queries return the same values regardless of whether they are issued before or after the year 2000. The RR datetime format element lets you write SQL statements that will return the same values from years whose first two digits are different.

Date Format Element Suffixes

Table 2-14 lists suffixes that can be added to datetime format elements:

Table 2-14 Date Format Element Suffixes
Suffix  Meaning  Example Element  Example Value 

TH 

Ordinal Number 

DDTH 

4TH 

SP 

Spelled Number 

DDSP 

FOUR 

SPTH or THSP 

Spelled, ordinal number 

DDSPTH 

FOURTH 

Restrictions:

  • When you add one of these suffixes to a datetime format element, the return value is always in English.

  • Date suffixes are valid only on output. You cannot use them to insert a date into the database.

 

Format Model Modifiers

The FM and FX modifiers, used in format models in the TO_CHAR function, control blank padding and exact format checking.

A modifier can appear in a format model more than once. In such a case, each subsequent occurrence toggles the effects of the modifier. Its effects are enabled for the portion of the model following its first occurrence, and then disabled for the portion following its second, and then reenabled for the portion following its third, and so on.

FM

"Fill mode". This modifier suppresses blank padding in the return value of the TO_CHAR function:

FX

"Format exact". This modifier specifies exact matching for the character argument and date format model of a TO_DATE function:

If any portion of the character argument violates any of these conditions, Oracle returns an error message.

Format Modifier Examples

The following statement uses a date format model to return a character expression:

SELECT TO_CHAR(SYSDATE, 'fmDDTH')||' of '||TO_CHAR
   (SYSDATE, 'fmMonth')||', '||TO_CHAR(SYSDATE, 'YYYY') "Ides" 
    FROM DUAL; 

Ides 
------------------ 
3RD of April, 1998

Note that the statement above also uses the FM modifier. If FM is omitted, the month is blank-padded to nine characters:

SELECT TO_CHAR(SYSDATE, 'DDTH')||' of '||
   TO_CHAR(SYSDATE, 'Month')||', '||
   TO_CHAR(SYSDATE, 'YYYY') "Ides"
   FROM DUAL; 

Ides 
----------------------- 
03RD of April    , 1998 

The following statement places a single quotation mark in the return value by using a date format model that includes two consecutive single quotation marks:

SELECT TO_CHAR(SYSDATE, 'fmDay')||'''s Special' "Menu"
     FROM DUAL; 

Menu 
----------------- 
Tuesday's Special 

Two consecutive single quotation marks can be used for the same purpose within a character literal in a format model.

Table 2-15 shows whether the following statement meets the matching conditions for different values of char and 'fmt' using FX (the table named table has a column date_column of datatype DATE):

UPDATE table 
  SET date_column = TO_DATE(char, 'fmt');
Table 2-15 Matching Character Data and Format Models with the FX Format Model Modifier

char 

'fmt' 

Match or Error? 

'15/ JAN /1998' 

'DD-MON-YYYY' 

Match 

' 15! JAN % /1998' 

'DD-MON-YYYY' 

Error 

'15/JAN/1998' 

'FXDD-MON-YYYY' 

Error 

'15-JAN-1998' 

'FXDD-MON-YYYY' 

Match 

'1-JAN-1998' 

'FXDD-MON-YYYY' 

Error 

'01-JAN-1998' 

'FXDD-MON-YYYY' 

Match 

'1-JAN-1998' 

'FXFMDD-MON-YYYY' 

Match 

String-to-Date Conversion Rules

The following additional formatting rules apply when converting string values to date values (unless you have used the FX or FXFM modifiers in the format model to control exact format checking):

XML Format Model

The SYS_XMLGEN function returns an instance of type SYS.XMLType containing an XML document. Oracle provides the XMLGenFormatType object, which lets you format the results of the SYS_XMLGEN function.

Table 2-17 lists and describes the attributes of the XMLGenFormatType object. The function that implements this type follows the table.

See Also:

 
Table 2-17 Attributes of the XMLGenFormatType Object
Attribute  Datatype  Purpose 

enclTag 

VARCHAR2(100) 

The name of the enclosing tag for the result of the SYS_XMLGEN function. If the input to the function is a column name, the default is the column name. Otherwise the default is ROW

processingIns 

VARCHAR2(4000) 

User-provided processing instructions, which are appended to the top of the function output before the element. 

The function that implements the XMLGenFormatType object follows:

STATIC MEMBER FUNCTION create(
      enclTag IN varchar2 := null,
      schemaType IN varchar2 := 'NO_SCHEMA'
      schemaName IN varchar2 := null,
      targetNameSpace IN varchar2 := null,
      dburl IN varchar2 := null,
      processingIns IN varchar2 := null)
   RETURN XMLGenFormatType;

   MEMBER PROCEDURE genSchema(spec IN varchar2);
   MEMBER PROCEDURE setSchemaName(schemaName IN varchar2);
   MEMBER PROCEDURE setTargetNameSpace(targetNameSpace IN varchar2);
    -- sets the tag name for the ROW element.passing NULL value 
    -- supresses ROW element printing, but this is allowed only 
    -- if there is only one row in the output or one column per row.
   MEMBER PROCEDURE setEnclosingElementName(enclTag IN VARCHAR2);
   end;
/

Go to previous page Go to beginning of chapter Go to next page
Oracle
Copyright © 1996-2001, Oracle Corporation.

All Rights Reserved.
Go To Documentation Library
Home
Go To Product List
Book List
Go To Table Of Contents
Contents
Go To Index
Index

Master Index

Feedback