Oracle8i SQL Reference
Release 2 (8.1.6)

A76989-01

Library

Product

Contents

Index

Prev Up Next

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. You can use a format model as an argument of the TO_CHAR and TO_DATE functions:

See "TO_CHAR (date conversion)", "TO_CHAR (number conversion)", and "TO_DATE". Note that a format model does not change the internal representation of the value in the database.

This section describes how to use:

Changing the Return Format

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

Example 1

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

SELECT ename employee, TO_CHAR(comm, '$9,990.99') commission
   FROM emp
   WHERE deptno = 30;
 
EMPLOYEE   COMMISSION
---------- ----------
ALLEN         $300.00
WARD          $500.00
MARTIN      $1,400.00
BLAKE
TURNER          $0.00
JAMES

Because of this format model, Oracle returns commissions with leading dollar signs, commas every three digits, and two decimal places. Note that TO_CHAR returns null for all employees with null in the COMM column.

Example 2

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 ename, TO_CHAR(Hiredate,'fmMonth DD, YYYY') hiredate
    FROM emp
    WHERE deptno = 20;
 
ENAME      HIREDATE
---------- ------------------
SMITH      December 17, 1980
JONES      April 2, 1981
SCOTT      April 19, 1987
ADAMS      May 23, 1987
FORD       December 3, 1981
LEWIS      October 23, 1997

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

Supplying the Correct Format

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. When you insert or update a column value, the datatype of the value that you specify must correspond to the column's datatype. 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.

Example

The following statement updates BAKER'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 emp 
  SET hiredate = TO_DATE('1998 05 20','YYYY MM DD') 
  WHERE ename = 'BLAKE'; 

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-7 lists the elements of a number format model. Examples are shown in Table 2-8.

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-7  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.

 

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. For information on these parameters, see Oracle8i Reference and Oracle8i National Language Support Guide.

You can change the default date format for your session with the ALTER SESSION statement. For information on changing the settings of these parameters, see "ALTER SESSION".

Example

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

SELECT TO_CHAR(number, 'fmt')
   FROM DUAL;
Table 2-8 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.23E+02' 

+123.45 

FM999.009 

'123.45' 

+123.0 

FM999.009 

'123.00' 

+123.45 

L999.99 

' $123.45' 

+123.45 

FML99.99 

'$123.45' 

+1234567890 

9999999999S 

'1234567890+' 

Date Format Models

You can use date format models:

Default Date Format

The default date format is specified either explicitly with the initialization parameter NLS_DATE_FORMAT or implicitly with the initialization parameter NLS_TERRITORY. For information on these parameters, see Oracle8i Reference.

You can change the default date format for your session with the ALTER SESSION statement. For information, see "ALTER SESSION".

Maximum Length

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

Date Format Elements

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

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-9  Datetime Format Elements

Element 

Specify in TO_DATE? 

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 

The first two digits of the century of a four-digit year, for example, '19' from '1900' and '20' from '2001'. "S" prefixes BC dates with "-".  

D
 

Yes 

Day of week (1-7). This element is used only to validate a date specified in the TO_DATE function. 

DAY
 

Yes 

Name of day, padded with blanks to length of 9 characters. This element is used only to validate a date specified in the TO_DATE function. 

DD
 

Yes 

Day of month (1-31). 

DDD
 

Yes 

Day of year (1-366). 

DY
 

Yes 

Abbreviated name of day. This element is used only to validate a date specified in the TO_DATE function. 

E
 

Yes 

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

EE
 

Yes 

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

HH
 

Yes 

Hour of day (1-12). 

HH12
 

Yes 

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 

Two-digit numeric abbreviation of 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 two 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 the same as the first 2 digits of the current year.

 
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, enter the 4-digit year. 

SS
 

Yes 

Second (0-59). 

SSSSS
 

Yes 

Seconds past midnight (0-86399). 

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. 

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 National Language Support

The functionality of some date format elements depends on the country and language in which you are using Oracle. For example, these date 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 date format elements are always in English.

The date 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.

For information on national language support initialization parameters, see Oracle8i Reference and Oracle8i National Language Support Guide.

ISO Standard Date Format Elements

Oracle calculates the values returned by the date 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 date format elements YYYY, YYY, YY, Y, and WW, see the discussion of national language support in Oracle8i National Language Support Guide.

The RR Date Format Element

The RR date format element is similar to the YY date format element, but it provides additional flexibility for storing date values in other centuries. The RR date format element allows you to 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 date format element, the date value returned is always in the current century. If you use the RR date 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-10 summarizes the behavior of the RR date format element.

Table 2-10 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 date format element.

Example 1

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
Example 2

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 date format element allows you to write SQL statements that will return the same values after the turn of the century.

Date Format Element Suffixes

Table 2-11 lists suffixes that can be added to date format elements:

Table 2-11 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 date 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.

Example 1

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 
Example 2

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.

Example 3

Table 2-12 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-12 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):


Prev Up Next
Oracle
Copyright © 1999 Oracle Corporation.

All Rights Reserved.

Library

Product

Contents

Index