Преобразование значимого выражения в символьное представление
Функция
Преобразование числового значения или значения типа «дата» из внутреннего представления в символьное.
Спецификация
::=
::=
::=
::=
::=
::=
Синтаксические правила
-
< Числовое выражение >
должно иметь значение типаSMALLINT
,INTEGER
,BIGINT
,DECIMAL
,REAL
илиDOUBLE
. -
При необходимости производится преобразование числового аргумента к типу данных DECIMAL.
-
При первом параметре функции to_char типа DATE при работе в режиме /COMPATIBILITY=ORACLE посторонние алфавитно-цифровые символы в строке формата при форматном выводе значений даты и времени вызывают выдачу кода завершения. При работе в прочих режимах /COMPATIBILITY эти символы копируются в выходную строку, без выдачи кода завершения.
Примечание
Ключ /COMPATIBILITY=ORACLE поддерживается со сборки 6.0.17.92.
-
< Выражение типа «дата-время» >
должно иметь значение типа DATE. -
Аргументы функции могут быть заданы
< SQL-параметром >
.select to_char(? (int)), to_char(:param (date), ?); +451 12/02/2015 MM/DD/YYYY |451 |12/02/2015|
-
Для числовых значений
< символьный формат >
может содержать следующие элементы:-
S – позиция для знака, должна быть одна в начале или в конце, выводятся и плюс и минус. При указании модификатора знак + выводится, в противном случае – нет. Для отрицательных чисел знак числа выводится всегда, независимо от присутствия или отсутствия в шаблоне модификатора S, для целых чисел нули после точки не формируются;
-
9 – позиция для цифры. Ведущие нули не выводятся за исключением числа 0;
-
0 – позиция для цифры с обязательным выводом ведущих или концевых нулей;
-
. – позиция для десятичной точки (должна быть одна);
-
D – позиция для десятичной точки или ее заменителя, который берется из параметра NLS_NUMERIC_CHARACTER;
-
, – позиция для разделителя-запятой, не может быть первой или идти после десятичной точки;
-
G – позиция для разделителя-запятой или ее заменителя, который берется из параметра NLS_NUMERIC_CHARACTER;
-
FM – признак «плотного вывода». Усекаются ведущие пробелы и концевые нули, т.е. вывод выравнивается по левой границе (по умолчанию это не делается и вывод в режиме /COMPATIBILITY=ORACLE выравнивается по правой границе);
-
EEEE – представление числа с мантиссой и порядком. Для данного формата не поддерживаются символы G и D, а также третий аргумент NLS_NUMERIC_CHARACTERS.
select to_char(415000035); |415000035| select TO_CHAR (415000035,'999999999'); | 415000035| select TO_CHAR (41500.0035,'999,999.999'); | 41,500.004| select TO_CHAR (415000035,'S00999999999'); | +00415000035| select TO_CHAR (round(415000035,6),'9.99999999EEEE'); |4.15000035E+08 | select to_char(1.0e0/3,'9.9999999999EEEE'); |3.333333333333330000000000000000E-01 | SELECT TO_CHAR(415000035, 'FM99999999990D9999999'), TO_CHAR(415000035, '99999999990D9999999'); |415000035.| 415000035.0000000|
-
-
Форматы по умолчанию числовых типов:
Тип данных Формат по умолчанию SMALLINT 99999 INT 9999999999 BIGINT 9999999999999999999 REAL 99999999.99 (округление) DOUBLE 99999999.99 (округление) DECIMAL 99999999999999999999.9999999999 -
< Символьный литерал >
в опции NLS_NUMERIC_CHARACTERS задается в виде двух символов 'XY', где:-
X – определяет символ, используемый для различения целой и дробной части числового значения (по умолчанию точка);
-
Y – определяет разделитель групп цифр числового значения (по умолчанию запятая).
select TO_CHAR (9223372036857, '9999999G999G999D999999', 'NLS_NUMERIC_CHARACTERS=.,'); | 9223372,036,857.000000| select TO_CHAR (9223372036857, '9999999G999G999D999999', 'NLS_NUMERIC_CHARACTERS=:;'); | 9223372:036:857;000000| select TO_CHAR (-1231.5, 'S9G999D9999', 'NLS_NUMERIC_CHARACTERS=''|?'''); | -1?231|5000|
-
-
< Символьный формат >
для< выражения типа «дата-время» >
может содержать следующие элементы:-
YYYY | IYYY – номер года (4 цифры);
-
YY | IY – номер года (2 последние цифры, диапазон 00-99);
-
Q – квартал года (1 для января-марта, 2 для апреля-июня, 3 для июля-сентября, 4 для октября-декабря);
-
MM – номер месяца в году (2 цифры, диапазон 01-12);
-
MON – сокращенное название месяца (3 буквы);
-
MONTH – полное название месяца (8 букв);
-
RM – вывод номера месяца римскими цифрами (I-XII);
-
J – номер дня по юлианскому календарю;
-
D – номер дня в неделе (1 цифра, диапазон 1-7);
-
DD – номер дня в месяце (2 цифры, диапазон 01-31);
-
DY – сокращенное название дня недели (3 буквы);
-
DAY – полное название дня недели (12 букв);
-
DDD – номер дня в году (3 цифры, диапазон 001-366);
-
HH12 – количество часов (2 цифры, диапазон 00-12), обычно комбинируется вместе с одним из форматов am, pm, AM, PM;
-
am, pm, AM, PM, a.m., p.m., A.M., P.M. – время до полудня (после полудня). A.M. автоматически заменяется на P.M. (и наоборот), в зависимости от заданного времени;
-
HH, HH24 – количество часов (2 цифры, диапазон 00-23);
-
MI – количество минут (2 цифры, диапазон 00-59);
-
SS – количество секунд (2 цифры, диапазон 00-59);
-
SSSSS – число секунд, прошедших от 00:00:00 текущих суток;
-
FF – количество тиков (2 цифры, диапазон 00-99);
-
FFF или MS – количество тысячных долей секунды (3 цифры) – только при использовании в функции
TO_DATE
, делится на 10 для перевода в тики. -
FM – признак «плотного вывода» наименований дней недели и месяцев года (т. е. усекаются пробелы в конце имен). Применяется в виде префикса к шаблону полного дня недели или полного месяца года, т.е. FMDAY или FMMONTH.
select to_char(to_date('21.03.2016', 'dd.mm.yyyy'), 'month', 'NLS_DATE_LANGUAGE=RUSSIAN' ) + '- месяц года.'; |март - месяц года.| select to_char(to_date('21.03.2016', 'dd.mm.yyyy'), 'fmmonth', 'NLS_DATE_LANGUAGE=RUSSIAN' ) + '- месяц года.'; |март - месяц года.|
Примечание
Представление значений элементов формата нельзя усекать, т.е. номер месяца 2 надо записывать в виде 02.
-
-
Запрещено использование в
< символьном формате >
для< выражения типа «дата-время» >
цифр и латинских букв, которые не задают разрешенный формат вывода одного из компонентов даты. -
Входным форматом «дата-время» по умолчанию, который распознается автоматически (т.е. без указания формата преобразования), являются:
-
DD.MM.[YY]YY[:[HH:[MI:[SS.[FF]]]];
-
MM/DD/[YY]YY[:[HH:[MI:[SS.[FF]]]];
-
DD-MON-[YY]YY[:[HH:[MI:[SS.[FF]]]];
-
YYYY-MM-DD[:[HH:[MI:[SS.[FF]]]].
Если символьные значения типа DATE представляются в ином виде, необходимо явно задавать формат преобразования.
create table tab1(dt date); insert into tab1 values(sysdate); insert into tab1 values('28-apr-50'); insert into tab1 values('28.04.51'); insert into tab1 values('04/28/52'); insert into tab1 values('28-apr-1953'); insert into tab1 values(to_date('28|04|1954','dd|mm|yyyy')); select * from tab1; |30.04.2003:12:03:27.00 | |28.04.1950:00:00:00.00 | |28.04.1951:00:00:00.00 | |28.04.1952:00:00:00.00 | |28.04.1953:00:00:00.00 | |28.04.1954:00:00:00.00 | insert into tab1 values(to_date('23.10.1997:02:27:38:78', 'dd.mm.yyyy:hh:ss:mi:ff')); insert into tab1 values(to_date('23.10.1997:02:27:38:178', 'dd.mm.yyyy:hh:ss:mi:ms')); select to_char(dt, 'dd.mm.yyyy:hh:mi:ss:fff') from tab1; |23.10.1997:02:38:27:780| |23.10.1997:02:38:27:170| …
-
-
Выходные символьные строки значений типа
DATE
по умолчанию (т.е. при отсутствии явно заданного формата преобразования) представляются всегда в виде DD.MM.YYYY:HH:MI:SS.FF.select sysdate; |30.04.2003:12:03:27.25|
-
При конструировании формата преобразования допустимо использовать обозначения элементов формата, перечисленные выше, в любых комбинациях (кроме ограничений, накладываемых функцией
TO_DATE
) и задавать любые символы и/или строки символов, не совпадающие с обозначениями элементов формата, в качестве разделителей элементов формата. При распознавании формата регистр букв не различается, т.е. обозначения вида DD, dd, Dd и dD равнозначны. При использовании формата преобразуемое входное символьное значение должно в точности соответствовать формату:Символьное представление Формат 16.02.1998:10:35 DD.MM.YYYY:HH:MI 16.02.98:10:35 dd.mm.yy:HH:MI 16-02-98 10:35 DD-mm-YY hh:mi 10 час 30 мин 16/02/1998 HH час MI мин DD/MM/YYYY В год 2000 месяца 02 В год YYYY месяца MM дня 16 10.35.47 дня DD hh.mi.ss 13.45.37 hh12.mi.ss a.m. -
При вводе года по формату YY к нему добавляется 2000, если значение меньше или равно 37, иначе – 1900. При выводе выдаются две последние цифры без каких-либо проверок.
-
Третьим параметром для
< выражения типа «дата-время» >
является< NLS_DATE_LANGUAGE >
. Значение третьего параметра определяет язык вывода названия месяцев и дней недели. Значение регистронезависимое, по умолчанию ENGLISH.select to_char(sysdate, 'dd mon iyyy day'), to_char(sysdate, 'dd mon iyyy day', 'NLS_DATE_LANGUAGE=russian'), to_char(sysdate, 'dd mon iyyy day', 'NLS_DATE_LANGUAGE=ENGLISH'); |15 nov 2016 tuesday|15 ноя 2016 вторник|15 nov 2016 tuesday|
Возвращаемое значение
-
Символьное представление
< значимого выражения >
осуществляется в соответствии с< символьным форматом >
преобразования. -
Если формат представления недостаточен, выводится последовательность в виде
*****
. -
Формат вывода выражений CAST … AS CHAR для выражения типа DECIMAL (если количество значащих цифр после запятой меньше точности) зависит от ключа /COMPATIBILITY=STANDARD запуска ядра СУБД:
-
ключ задан – значение после запятой будет дополнено нулями до значения точности;
-
ключ не задан – значение после запятой не будет дополнено нулями до значения точности.
Примеры. 1) Ядро СУБД запущено с ключом /COMPATIBILITY=STANDARD: select cast (cast 1.5 as DECIMAL(15,3)) as char; |1.500 | 2) Ядро СУБД запущено без ключа /COMPATIBILITY=STANDARD: select cast (cast 1.5 as DECIMAL(15,3)) as char; |1.5 |
-
Примеры
Пусть значение столбца dat будет 2 часа 27 минут 38 секунд 78 тиков 23 октября 1997, тогда:
to_char(dat) /* по умолчанию*/ |23-oct-97 |
to_char(dat,'dd-mm-yyyy/hh24:mi:ss') |23-10-1997/02:27:38 |
to_char(dat,'Дата отчета: dd/mm/yy') |Дата отчета: 23/10/97 |
to_char(dat,'hh24.mi') |02.27 |
select sysdate, to_char(sysdate, 'hh12.mi.ss a.m.'); |06.06.2003:14:07:14.00 |02.07.14 p.m. |