В этом учебном пособии вы узнаете, как использовать Oracle/PLSQL функцию TO_CHAR с синтаксисом и примерами.
Описание
Функция Oracle/PLSQL TO_CHAR преобразует число или дату в строку.
Синтаксис
Синтаксис функции Oracle/PLSQL TO_CHAR:
Параметры или аргументы
value может принимать числовое значение или дату, которые будут преобразованы в строку.
format_mask не является обязательным. Это формат, который будет использоваться для преобразования значения в строку.
nls_language не является обязательным. Это язык NLS используется для преобразования значения в строку.
Примечание
Функция TO_CHAR возвращает string значение.
Применение
Функцию TO_CHAR можно использовать в следующих версиях Oracle/PLSQL:
- Oracle 12c, Oracle 11g, Oracle 10g, Oracle 9i, Oracle 8i
Пример
Рассмотрим несколько примеров функции TO_CHAR и изучим, как использовать функцию TO_CHAR в Oracle/PLSQL.
Для чисел
Ниже приведены примеры для функции TO_CHAR для чисел.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
SQL> SELECT TO_CHAR(1242.78, '9999.9') FROM DUAL; --Результат: 1242.8 SQL> SELECT TO_CHAR(-1242.78, '9999.9') FROM DUAL; --Результат: -1242.8 SQL> SELECT TO_CHAR(1242.78, '9,999.99') FROM DUAL; --Результат: 1,242.78 SQL> SELECT TO_CHAR(1242.78, '$9,999.00') FROM DUAL; --Результат: $1,242.78 SQL> SELECT TO_CHAR(18, '000099') FROM DUAL; --Результат: 000018 |
Для дат
Ниже приведен список допустимых параметров, когда функция TO_CHAR используется для преобразования даты в строку. Эти параметры могут быть использованы во многих комбинациях.
Параметр | Пояснение |
---|---|
YEAR | Год. |
YYYY | 4-значный год. |
YYY YY Y |
Последние 3, 2 или 1 цифра(ы) года. |
IYY IY I |
Последние 3, 2 или 1 цифра(ы) года ISO. |
IYYY | 4-значный год в соответствии со стандартом ISO. |
Q | Квартал года (1, 2, 3, 4; JAN-MAR = 1). |
MM | Месяц (01-12; JAN = 01). |
MON | Сокращенное название месяца. |
MONTH | Название месяца, дополненное пробелами длиной до 9 символов. |
RM | Римская цифра RM (I-XII; JAN = I). |
WW | Неделя года (1-53), где неделя 1 начинается в первый день года и продолжается до седьмого дня года. |
W | Неделя месяца (1-5), где неделя 1 начинается в первый день месяца и заканчивается седьмым. |
IW | Неделя года (1-52 или 1-53) на основе стандарта ISO. |
D | День недели (1-7). |
DAY | Название дня. |
DD | День месяца (1-31). |
DDD | День года (1-366). |
DY | Сокращенное название дня. |
J | юлианский день; количество дней с 1 января 4712 г. до н.э. |
HH | Час дня (1-12). |
HH12 | Час дня (1-12). |
HH24 | Час дня (0-23). |
MI | Минуты (0-59). |
SS | Секунды (0-59). |
SSSSS | Секунды после полуночи (0-86399). |
FF | Дробные секунды. |
Ниже приведены примеры функции TO_CHAR для дат.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
SQL> SELECT TO_CHAR(sysdate, 'yyyy/mm/dd') FROM DUAL; --Результат: 2014/08/28 SQL> SELECT TO_CHAR(sysdate, 'yyyy.mm.dd') FROM DUAL; --Результат: 2014.08.28 SQL> SELECT TO_CHAR(sysdate, 'Month DD, YYYY') FROM DUAL; --Результат: Август 28, 2014 SQL> SELECT TO_CHAR(sysdate, 'FMMonth DD, YYYY') FROM DUAL; --Результат: Август 28, 2014 SQL> SELECT TO_CHAR(sysdate, 'MON DDth, YYYY') FROM DUAL; --Результат: АВГ 28TH, 2014 SQL> SELECT TO_CHAR(sysdate, 'FMMON DDth, YYYY') FROM DUAL; --Результат: АВГ 28TH, 2014 SQL> SELECT TO_CHAR(sysdate, 'FMMon ddth, YYYY') FROM DUAL; --Результат: Авг 28th, 2014 |
Вы заметите, что в некоторых примерах функции TO_CHAR, параметр format_mask начинается с 'FM'. Это означает, что нули и пробелы подавлены. Это можно увидеть в приведенных ниже примерах.
1 2 3 4 5 6 7 8 9 10 11 |
SQL> SELECT TO_CHAR(SYSDATE, 'FMMonth DD, YYYY') FROM DUAL; --Результат: Август 9, 2014 SQL> SELECT TO_CHAR(SYSDATE, 'FMMON DDth, YYYY') FROM DUAL; --Результат: АВГ 9TH, 2014 SQL> SELECT TO_CHAR(SYSDATE, 'FMMon ddth, YYYY') FROM DUAL; --Результат: Авг 9th, 2014 |
Нули были подавлены, так что день показывает, как "9", а не "09".
Вопросы и ответы
Вопрос:
Почему не получается отсортировать дни недели по порядку?
1 2 3 4 5 |
SELECT ename, hiredate, TO_CHAR((hiredate),'fmDay') "Day" FROM emp ORDER BY "Day"; |
Ответ:
В приведенном выше запросе SQL, маска формата 'fmDay' в функции TO_CHAR вернет наименование дня, а не числовое значение дня.
Для сортировки дней недели, вам нужно вернуть числовое значение дня с помощью маски формата 'fmD' следующим образом:
1 2 3 4 5 |
SELECT ename, hiredate, TO_CHAR((hiredate),'fmD') "Day" FROM emp ORDER BY "Day"; |