Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
lec4.doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
249.86 Кб
Скачать

Суффиксы, префиксы и другие элементы, влияющие на формат вывода

Задавая модель формата можно использовать знаки пунктуации (/ . ,), а также символьные константы (заключенные в двойные кавычки), которые будут включены в результат. Кроме того, можно использовать:

Префикс FM

Подавляет конечные пробелы в названиях месяцев и дней недели, оставляя результат переменной длины. Подавляются и ведущие нули в числах. Повтор FM отменяет подавление.

Суффикс TH

Для вывода порядковых числительных (например, DDTH для вывода в формате “4th”).

Суффикс SP

Для вывода чисел словами (например, DDSP для вывода слова “FOUR”)

Сочетание суффиксов SP и TH: SPTH или THSP

Для вывода порядковых числительных словами (например, DDSPTH или DDTHSP для вывода слова “FOURTH”).

Примеры использования функций преобразования и моделей форматов

Примеры использования TO_CHAR для преобразования дат: Чаще всего функция TO_CHAR используется для преобразования даты при выводе. Дело в том, что Oracle выводит даты при выборке в формате, установленном по умолчанию. Это может быть, например, формат ‘dd-mm-yy’, ‘dd-mon-yy’ или ‘dd.mm.yy’. Как правило, формат, используемый по умолчанию, не содержит информации о времени, квартале месяца, столетии и пр. На практике часто возникает необходимость вывести более полную информацию, задав необходимый формат.

SELECT TO_CHAR(SYSDATE,'dd - mm - yyyy - hh24 - mi - ss') data

FROM dual;

Результат:

DATA

-----------------------------

06 - 10 - 2003 - 17 - 05 - 49

SELECT TO_CHAR(SYSDATE,'dd "of" Month "year" yyyy') data

FROM dual;

Результат:

DATA

-------------------------

06 of October year 2003

-- В данном примере число состоит из одной цифры, поэтому перед ним -- выводится ведущий 0, так как в модели формата указано, что число надо -- выводить двумя цифрами. Кроме того, модель ‘Month’ предполагает, что -- название месяца дополняется конечными пробелами до 9 символов. Чтобы -- убрать ведущие нули и конечные пробелы, используйте префикс FM.

SELECT TO_CHAR(SYSDATE,'fmdd "of" Month "year" yyyy') data

FROM dual;

Результат:

DATA

-------------------------

6 of October year 2003

SELECT TO_CHAR(SYSDATE,'fmDAY : MONTH : YEAR') data

FROM dual;

Результат:

DATA

---------------------------------------

MONDAY : OCTOBER : TWO THOUSAND THREE

Пример использования to_char для преобразования чисел:

SELECT salary, TO_CHAR(salary, '099999'), TO_CHAR(salary, '999'),

TO_CHAR(salary, '$99999'), TO_CHAR(salary, '99999V999')

FROM s_emp;

Результат:

SALARY TO_CHAR TO_C TO_CHAR TO_CHAR(S

--------- ------- ---- ------- ---------

2500 002500 #### $2500 2500000

1450 001450 #### $1450 1450000

1400 001400 #### $1400 1400000

1450 001450 #### $1450 1450000

25 rows selected

-- Символы # выводятся в случае, если количество цифр в числе превышает -- количество цифр, предусмотренное моделью формата.

Пример использования TO_CHAR в предложении WHERE: Вывести фамилии служащих, которые были приняты на работу в понедельник.

SELECT last_name

FROM s_emp

WHERE TO_CHAR(start_date, 'dy')='mon';

Результат:

LAST_NAME

------------

Nagayama

Menchu

Magee

Sedeghi

Примеры использования TO_DATE: Если Вы хотите привести в запросе конкретную дату, необходимо заключить ее в апострофы. Но сервер Oracle расценит ее как дату только в случае, если заданная дата приводится в соответствующем контексте и если ее формат совпадает с одним из форматов, используемых сервером по умолчанию. В противном случае, заданная дата может быть расценена как символьное значение, что может привести к ошибкам. Чтобы их избежать, рекомендуется всегда при задании дат в запросах пользоваться функцией TO_DATE, чтобы явно указать серверу, что вводимое Вами значение является датой.

SELECT last_name

FROM s_emp

WHERE start_date='05/09/1991';

Результат:

no rows selected

-- Данным запросом пользователь хотел найти служащих, принятых на работу 9 -- мая 1991 года. Сервер воспринимает введенное значение, как 5 сентября -- 1991года, поэтому не вернул ни одной строки. Тот же пример, но с -- указанием модели формата:

SELECT last_name

FROM s_emp

WHERE start_date=to_date('05/09/1991','mm/dd/yyyy');

Результат:

LAST_NAME

-------------------

Schwartz

SELECT ROUND('27-09-2003', 'year')

FROM dual;

Результат:

ERROR at line 1:

ORA-01722: invalid number

-- Функция ROUND может применяться как для округления чисел, так и для -- округления дат. По умолчанию Oracle пытается произвести округление числа, -- но так как округляемое значение заключено в апострофы, его нельзя -- расценить как число, что вызывает ошибку Oracle. Чтобы явно указать, что -- необходимо произвести округление даты, необходимо воспользоваться -- функцией TO_DATE:

SELECT ROUND(TO_DATE('27-09-2003','dd-mm-yyyy'), 'year')

FROM dual;

Результат:

ROUND(TO

--------

01.01.04

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]