после полудня
номер квартала
римский номер месяца
две цифры года
секунда минуты
число секунд со времени полуночи
год со знаком: например, 500 г. до н. э. = -500
номер недели месяца
номер недели года
последняя цифра года
последние две цифры года
последние три цифры года
год
год словами (NINETEEN-NINETY-NINE)
год словами (Nineteen-Ninety-Nine)
год словами (nineteen-ninety-nine)
Преобразование дат в строки символов
Значения типа DATETIME конвертируют (преобразуют) в символьные строки для того, чтобы иметь возможность изменить представление дат при выводе данных запроса. Для этого используются функции преобразования. Вот пример преобразования значения даты и времени в символьную строку в запросе SQL Server:
SELECT DATE_HIRE = DATENAME(MONTH, DATE_HIRE)
FROM EMPLOYEE_PAY__TBL
DATE_HIRE
May
June
August
June
July
January
6 rows affected.
В следующем примере для преобразования используется функция TO_CHAR из Oracle:
SELECT DATE_HIRE, TO_CHAR(DATE_HIRE,'Month dd, yyyy') HIRE
FROM EMPLOYEE_PAY_TBL;
DATE_HIRE HIRE
23-MAY-89 May 23, 1989
17-JUN-90 June 17, 1990
14-AUG-94 August 14, 1994
28-JUN-97 June 28, 1997
22-JUL-96 July 22, 1996
14-JAN-91 January 14, 1991
6 rows selected.
Преобразование символьных строк в даты
Следующий пример иллюстрирует один из способов преобразования символьной строки в формат даты. После преобразования соответствующие данные можно сохранить в столбце, имеющем атрибут типа DATETIME.
SELECT TO_DATE('JANUARY 01 1999','MONTH DD YYYY')
FROM EMPLOYEE_PAY_TBL;
TO_DATE('
Ol-JAN-99
Ol-JAN-99
Ol-JAN-99
Ol-JAN-99
Ol-JAN-99
Ol-JAN-99
6 rows selected.
Вы, наверное, обратили внимание на то, что в выводе запроса представлены 6 строк, хотя в условии предлагается только одна дата. Такой результат получен по причине того, что преобразование выбиралось для данных таблицы EMPLOYEE_PAY_TBL, в которой шесть строк. Преобразование выполнялось для каждой из строк таблицы.
Резюме
Вы получили представление о значениях типа DATETIME, определяемых на базе стандарта ANSI. Но как и в случае многих других элементов SQL, в большинстве реализаций языка имеются отклонения имен функций и их синтаксиса от стандарта SQL, хотя лежащие в их основе концепции определяются стандартом. На предыдущем уроке вы видели, как варьируют в зависимости от реализации языка предлагаемые функции, а в ходе этого урока вы получили возможность увидеть подобные отклонения для типов даты и времени и используемых с ними функций и операторов. Не забывайте о том, что не все предлагаемые здесь примеры будут работать в рамках используемой вами реализации SQL, но вы должны понять принципы работы со значениями дат и времени, которые применимы в любой реализации языка.
Вопросы и ответы
По каким причинам в различных реализациях наблюдаются отклонения от стандартного набора типов данных и функций?
Такие различия в реализациях языка возникают, главным образом, по причине различного подхода производителей к выбору способа внутреннего хранения данных и, соответственно, оптимальных средств для извлечения этих данных. Все производители обязаны лишь обеспечить средства для хранения значений дат и времени на основе требований ANSI, предполагающих для дат и времени такие компоненты как год, месяц, день, час, минута, секунда и т. д.
Если я хочу сохранить дату и время не так, как предлагается в той конкретной реализации SQL, которую использую я, то какие возможности для этого у меня имеются?
Даты можно сохранить практически в любом виде, если сохранять их в столбце с атрибутами символьной строки переменной длины. Главное, о чем нужно не забывать, что при сравнении значений дат необходимо преобразовать строку со значением даты в значение подходящего типа DATETIME.
Практикум
Задания практических занятий разделены на тесты и упражнения. Тесты предназначены для проверки общего уровня понимания рассмотренного материала. Упражнения дают возможность применить на практике идеи, обсуждавшиеся в ходе текущего урока, в комбинации с идеями из предыдущих уроков. Мы рекомендуем ответить на тестовые вопросы и выполнить упражнения прежде, чем продолжать дальнейшее чтение книги. Ответы можно проверить по Приложению Б, "Ответы".
Тесты
1. Откуда извлекаются системные дата и время?
2. Назовите стандартные компоненты значения типа DATETIME.
3. Какой фактор может оказаться важным при представлении и сравнении значений дат и времени, если ваша компания имеет статус международной организации?
Читать дальше