Оператор SELECT. Выбор данных из таблицы. Псевдонимы столбцов. Удаление повторяющихся строк, страница 3

Первый день недели принимает значения: 1 – 7 (1 – Воскресенье), по умолчанию – 1.

Первая неделя года принимает значения:

1 – неделя, которая содержит 1 января,

2 – неделя, в которой не менее 4 дней,

3 – первая полная неделя.

Пример. Издания, опубликованные в третьем квартале. (Запрос Publish_Quater)

SELECT title_name, pubdate, Datepart('q',pubdate) AS Квартал

FROM title

WHERE (Datepart('q',pubdate)) = 3

ORDER BY pubdate DESC;

Все коммерческие СУБД предлагают дополнительные функции для работы с датой.

Пример. Издания, опубликованные в течение указанного количества месяцев от заданной даты. (Запрос Publish_X-Month_from-Y-Date)

SELECT title_name, pubdate

FROM title

WHERE pubdate Between #1/1/2000# And DateAdd("m",9,#1/1/2000#)

ORDER BY pubdate DESC;

Пример. Функция DateDiff вычисляет интервал между датами (см. запросы IntervalDates и IntervalDates_1). Аргументы функции аналогичны DatePart. Количество недель за прошедший период вычисляется двумя способами: количество воскресений (первый аргумент “ww”) либо количество дней недели, соответствующих начальной дате (“w”).

Период после публикации (в днях) (Запрос IntervalDates):

SELECT title_name, pubdate, Date()-pubdate, DateDiff('d',pubdate,Date())

FROM title

ORDER BY pubdate DESC;

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

Пример. Издания, опубликованные в первом полугодии. (Запрос First_Half-Year)

SELECT title_name,

pubdate

FROM title

WHERE (Year(pubdate)) Between 2001 And 2002) AND

(Month(pubdate)) Between 1 And 6)

ORDER BY pubdate DESC;

Зад. Постройте запрос «Заказы, сделанные в выходные».

Функции текущей даты/времени различаются в разных СУБД. В Access применяются Date(), Time(), Now().

Допустим запрос вида:

SELECT Date() AS 'ДАТА', Time() AS 'ВРЕМЯ', Now() AS 'ДАТА + ВРЕМЯ';

Условные выражения

Выражение Case включено в стандарт SQL-92. Основное назначение – заменять коды или аббревиатуры. Имеет два формата:

- произвольный – сравнивает результат вычисления выражения с простыми выражениями из перечня и выдает один из альтернативных вариантов;

CASE выражение

WHEN значение1 THEN значение 1

WHEN значение2 THEN значение 2

[ ELSE значение ]

END

Если конструкция ELSE опущена, но ни одно из значений не является результатом вычисления выражения, результатом является значение NULL.

- поисковый – вычисляет условные выражения и формирует результат соответствующий истинному значению.

CASE

WHEN условие1 THEN значение 1

WHEN условие 2 THEN значение 2

[ ELSE значение ]

END

Пример. Переоценка книг по категориям. CASE применяется для формирования вычислимого поля запроса.

SELECT title_name,

                type,

                price,

                CASE type

                      WHEN ‘history’ THEN price*1,1

                      WHEN ‘psychology’ THEN price*0,9

                       ELSE price

                END

                AS ‘New_price’

     FROM title

     ORDER BY type ACS, ‘New_price’ DESC;

Примечание. В Access не поддерживается конструкция CASE. Вместо нее применяется функция Switch. (Запрос NewPrice-Switch)

SELECT title_name,

type,

price,

Switch(type="history",price*1.1,

type="psychology",price*0.9,

type In ("biography","computer","children"),price)

AS "New_price"

FROM title

ORDER BY type, 4 DESC;

Пример. Расположить книги по объемам продаж. (Запрос CategorySales-Switch)

SELECT title_name,

Switch(sales<1000, "Менее 1000",

sales< 10000, "От 1000 до 10000",

sales < 100000, "От 10 000 до 100 000",

sales < 1000000,"От 100 000 до 1 000 000",

sales >= 100000, "Не менее 1 000 000") AS "Категория продаж"