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

FROM titles

WHERE pubdate IN (#2000-01-01#, #2001-01-01#, #2002-01-01#)

Примечание. Для обозначения даты используется перед литералом ключевое слово DATE: DATE ‘2001-01-01’, которое в Microsoft SQL Server следует опускать.

Вычислимые столбцы

В выборку могут входить вычислимые (производные столбцы).

SELECT title_id, price,

0.10 AS “Скидка”,

price * (1-0.10) AS “Новая цена”

Оператор  ||  позволяет сцеплять (конкатерировать) строки.

SELECT au_fname || ‘ ‘ || au_lname AS “Имя автора”

FROM authors

ORDER BY au_lname ASC, au_fname ASC

Функция CAST преобразует число в символ.

SELECT CAST(sales AS CHAR(7)) || ‘продано наименований‘ || title_id AS “Продажи биографий”

FROM titles

WHERE type = ‘biography’

AND sales IS NOT NULL

ORDER BY sales DESC

Примечание. В Access применяются операторы + и функция FORMAT (Запрос Sales-format):

SELECT Format(sales)+'  экземпляров издания   '+title_id AS 'Продажи биографий'

FROM title

WHERE type='biography' AND sales Is Not Null

ORDER BY title.sales DESC;

Функция Mid (строка, начало [, длина]) выбирает из строки цепочку символов. (Запрос Author-Mid)

SELECT Mid(au_fname,1,1)+'.  '+au_lname AS 'Имя автора', state

FROM authors

WHERE state In ("NY","CO");

Применение функций LOWER, UPPER

SELECT LOWER(au_fname) AS ‘Lower’,

UPPER(au_lname) AS ‘Upper’

FROM authors

Для удаления головных, хвостовых, головных плюс хвостовых пробелов применяются функции LTRIM, RTRIM, TRIM. (Запрос Author-sort)

SELECT IIf(TRIM(au_fname) IS Null,' ',TRIM(au_fname))+'  '+au_lname AS 'Имя автора'

FROM authors

ORDER BY au_lname, au_fname;

Определение длины строки

Стандарт SQL определяет строковые функции:

CHARACTER_LENGTH() – количество символов (не байт, т.к. бывает кодировка Unicode),

BIT_LENGTH() – число бит в выражении,

OCTET_LENGTH() – число байт.

В Access (Microsoft SQL Server) используется функция LEN. (Запрос Length_Title)

SELECT title_name,

LEN(title_name) AS ‘Len’

FROM title

WHERE LEN(title_name) < 30

ORDER BY LEN(title_name)  ASC;

Поиск подстроки

В SQL для поиска подстроки внутри заданной строки применяется функции POSITION (подстрока IN строка).

Коммерческие СУБД предоставляют другие функции:

- Access – InStr(начальная_позиция, строка, подстрока)

- Microsoft SQL Server – CHARINDEX,

- Oracle – INSTR,

-MySQL – LOCATE.

(Запрос Position_Word)

SELECT title_name,

InStr(title_name,’Not’) AS ‘Posit’

FROM title

WHERE ((InStr([title_name],"Not")) Between 1 And 10)

ORDER BY InStr(title_name,’Not’) DESC;

Примечание. В SQL функция CAST применяется для преобразования выражения одного типа в другой (в большинстве случаев СУБД выполняет преобразование типов автоматически). В Access используется семейство аналогичных функций: CStr, CInt, CDec, преобразующих выражение к строке, к числу целому либо с десятичной точкой. В строковых выражениях также применяются функции Space (строка из заданного количества пробелов) и Left (указанное количество символов от начала строки).

Операции с датой и временем

SQL предлагает ряд функций для работы с датами. Например, EXTRACT(поле FROM дата либо интервал)

Аргумент поле может принимать следующие значения: YEAR, MONTH, DAY, HOUR, MINUTE, SECOND, TIMEZONE_HORE, TIMEZONE_MINUTE. Результат имеет тип INTEGER, за исключением аргумента MINUTE, тогда его тип NUMERIC.

К датам могут применяться операции + , - :

дата – дата, результат – интервал, дата + дата, – дата, дата – интервал, – дата, интервал + дата, – дата, интервал + интервал, – интервал, интервал – интервал, – интервал, интервал + число, – интервал, интервал / число, – интервал, число * интервал, – интервал.

В Access и Microsoft SQL Server используется функция

DatePart(интервал, дата [первый день недели [, первая неделя года] ].

Интервал может принимать значения: yyyy, q (квартал), m, y (день), d, ww (неделя), h (час), n (минута), s.