KnigaRead.com/

W Cat - SQL за 24 часа

На нашем сайте KnigaRead.com Вы можете абсолютно бесплатно читать книгу онлайн W Cat, "SQL за 24 часа" бесплатно, без регистрации.
Перейти на страницу:

Без использования форматирования информация о дате и времени извлекается из базы данных в определенном принятом по умолчанию виде, например,

1999-12-31

31-DEC-99

1999-12-31 23:59:01.11

Но как быть, если дату нужно представить, например, в следующем виде?

December 31, 1999

Тогда необходимо конвертировать дату из формата DATETIME в символьный. Это делается с помощью соответствующих функций, применение которых будет рассматриваться в следующих разделах.

Шаблоны представления дат Sybase

УУ год

qq квартал

mm месяц

dy день года

wk неделя

dw день недели

hh час

mi минута

ss секунда

ms миллисекунда


Шаблоны представления дат Oracle_____________________________

AD Н. Э.

AM ДО ПОЛУДНЯ

ВС ДО Н. Э.

CC столетие

D номер дня недели

DD номер дня месяца

DDD номер дня года

DAY название дня недели (MONDAY)

Day название дня недели (Monday)

day название дня недели (monday)

Шаблоны предстявления дат Oracle


DY

Dy

dy

HH

НН12

НН24

J

MI

MM

MON

Mon

mon

MONTH

Month

month

PM

Q

KM

RR

3

SSSSS

SYYYY

W

WW

Y

YY

YYY

YYYY

YEAR

Year

year


трехбуквенное сокращение для дня недели (MON)

трехбуквенное сокращение для дня недели (Моп)

трехбуквенное сокращение для дня недели (топ)

час дня

час дня

час дня в 24-часовом формате

день по юлианскому календарю с 12-31-4713 до н. э.

минута часа

номер месяца

трехбуквенное сокращение для месяца (JAN)

трехбуквенное сокращение для месяца (Jan)

трехбуквенное сокращение для месяца (Jan)

название месяца (JANUARY)

название месяца (January)

название месяца (January)

после полудня

номер квартала

римский номер месяца

две цифры года

секунда минуты

число секунд со времени полуночи

год со знаком: например, 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. Какой фактор может оказаться важным при представлении и сравнении значений дат и времени, если ваша компания имеет статус международной организации?

4. Можно ли сравнить значение даты в виде символьной строки со значением даты типа DATETIME?


Упражнения

Запишите операторы SQL для представленных ниже упражнений, основываясь на следующей информации.

Используйте SYSDATE для получения текущих даты и времени. Используйте таблицу с именем DATES.

Для преобразования дат в символьные строки используйте функцию TO_CHAR со следующим синтаксисом:

TO_CHAR('выражение','шаблон представления даты')

Для преобразования символьных строк в даты используйте функцию TO_DATE со следующим синтаксисом:

TO_DATE('выражение','шаблон представления даты') Информация о шаблонах представления дат дана в следующей таблице.

Шаблон представления дат___Описание___________________

MONTH название месяца

DAY название дня недели

DD номер дня месяца

мм номер месяца года

YY последние две цифры года

YYYY ГОД

MI минута часа ss секунда минуты

1. Предположив, что сегодняшней датой является 1999-12-31, преобразуйте текущую дату в формат December 31 1999.

2. Преобразуйте строку 'DECEMBER 31 1999' в формат DATE.

3. Запишите оператор, возвращающий день недели, на который выпадает новогодний вечер конца 1999 года. Предположите, что дата хранится в виде 31-DEC-99, являясь значением типа DATETIME.

13-й час Объединение таблиц в запросах

До сих пор создаваемые вами запросы извлекали данные из одной таблицы. Из этого урока вы узнаете, как связать таблицы в запросе так, чтобы можно было извлечь данные из нескольких таблиц.

Основными на этом уроке будут следующие темы.

• Основные подходы к связыванию таблиц

• Различные типы связей

• Как и когда следует использовать связывание таблиц

• Ряд практических примеров связывания таблиц

• Последствия неправильного связывания таблиц

• Использование псевдонимов таблиц в запросах


Отбор данных из нескольких таблиц

Возможность отбора данных из нескольких таблиц является одной из самых полезных возможностей SQL Без такой возможности теряет смысл сама идея реляционной базы данных. Запросы к одной таблице могут быть весьма информативными, но в реальных базах данных чаще всего бывают нужны данные сразу из нескольких таблиц.

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

Перейти на страницу:
Прокомментировать
Подтвердите что вы не робот:*