Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЭУМКД_БД_2.doc
Скачиваний:
20
Добавлен:
23.09.2019
Размер:
6.01 Mб
Скачать

1.3.5. Выражения

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

SELECT CITY, TARGET, SALES, (SALES/TARGET)*100 FROM OFFICES

А этот запрос возвращает список офисов, объём продаж которых превышает план на $50000 или больше:

SELECT СITY FROM OFFICES WHERE SALES > TARGET + 50000.00

В соответствии со стандартом ANSI/ISO в выражениях можно использовать четыре арифметические операции: сложение (X+Y), вычитание (X-Y), умножение (X*Y) и деление (X/Y).

Для формирования сложных выражений можно использовать скобки, например:

(SALES*1.05)-(TARGET*0.95)

Строго говоря, в приведённом выше выражении скобки не требуются, поскольку в соответствии со стандартом ANSI/ISO умножение и деление имеют более высокий приоритет, чем сложение и вычитание.

В стандарте ANSI/ISO определено также, что преобразование целых чисел в десятичные и десятичных чисел в числа с плавающей запятой должно происходить автоматически. Таким образом, в одном выражении можно использовать числовые данные разных типов.

В большинстве СУБД допускается выполнение операций над датами и строками. Например, в СУБД DB2 реализован оператор конкатенации строк, записываемый в виде двух вертикальных черточек (||). Если в двух столбцах с именами FIRST_NAME И LAST_NAME содержатся значения "Jim" и "Jackson", следующее выражение в DB2:

(‘Mr./Mrs.’ || FIRST_NAME || ‘ ’ || LAST_NAME)

вернёт строку "Mr./Mrs. Jim Jackson".

1.3.6. Встроенные функции

Хотя встроенные функции не были определены в стандарте SQL1, в большинстве СУБД такие функции были реализованы уже в то время. Многие из них выполняли различные преобразования типов данных.

Например, встроенные функции MONTH() и YEAR() из СУБД DB2 принимают в качестве аргумента значения DATE или TIMESTAMP и возвращают целое число, представляющее соответственно месяц или год из заданного аргумента.

Запрос, приведенный ниже, возвращает имя и месяц приёма на работу служащего:

SELECT NAME, MONTH(HIRE_DATE) FROM SALESREPS

А этот запрос возвращает список служащих, нанятых на работу в 2008 году:

SELECT NAME, MONTH(HIRE_DATE) FROM SALESREPS WHERE YEAR(HIRE_DATE)=2008

Кроме того, многие из встроенных функций выполняют форматирование данных. Например, встроенная функция TO_CHAR() из СУБД Oracle принимает в качестве аргументов значение типа DATE и спецификацию формата, а возвращает строку, содержащую значение даты, отформатированное в соответствии со спецификацией. В результатах, возвращаемых запросом

SELECT NAME, TO_CHAR (HIRE_DATE, ‘DAY MONTH DD, YYYY’)

FROM SALESREPS

благодаря использованию встроенной функции TO_CHAR() все даты приёма на работу будут иметь формат "Wednesday June 14, 2008"

В общем случае встроенную функцию разрешается использовать в любом месте инструкции SQL, в котором можно использовать константу того же типа данных. Здесь невозможно перечислить все встроенные функции, поддерживаемые распространёнными диалектами SQL, поскольку их слишком много. В стандарт SQL2 вошли наиболее полезные функции из различных СУБД. Эти функции перечислены в таблице:

Встроенные функции, определённые в стандарте SQL2

Функция

Что возвращает

BIT_LENGTH(строка)

количество битов в цепочке

CAST(значение AS тип данных)

значение, преобразованное в указанный тип данных (например, дата, преобразованная в строку)

CHAR_LENGTH(строка)

длина строки символов

CONVERT (строка USING функция)

строка, преобразованная в соответствии с указанной функцией

CURRENT_DATE

текущая дата

CURRENT_TIME(точность)

текущее время с указанной точностью

CURRENT_TIMESTAMP(ТОЧНОСТЬ)

текущие дата и время с указанной точностью

EXTRACT(часть FROM значение)

указанная часть (DAY, HOUR и т.д.) из значения типа DATETIME

LOWER(строка)

строка, переведённая в нижний регистр

OCTET_LENGTH(строка)

число байтов в строке символов

POSITION(подстрока IN строка)

позиция, с которой начинается вхождение подстроки в строку

SUBSTRING (строка FROM n FOR длина)

часть строки, начинающаяся с n-го символа и имеющая указанную длину

TRANSLATE(строка USING функция)

строка, транслированная с помощью указанной функции

TRIM(BOTH символ FROM строка)

строка, из которой удалены ведущие и хвостовые указанные символы

TRIM(LEADING символ FROM строка)

строка, из которой удалены ведущие указанные символы

TRIM(TRAILING символ FROM строка)

строка, из которой удалены хвостовые указанные символы

UPPER (строка)

строка, переведённая в верхний регистр

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