Программирование >>  Построение запросов sql 

1 ... 21 22 23 [ 24 ] 25 26 27 ... 101


Например, необходимо извлечь все данные об оплатах, которые были произведены после 13 июня 2001 года и значения оплат которых превышают 60. Одновременно с этим вывести все данные об оплатах, которые были сделаны абонентом с лицевым счётом 005488 до 2000 года. Для решения данной задачи можно использовать следующий запрос: SELECT * FROM PaySumma

WHERE (Paydate > 13.06.2001 AND PaySum>60) OR (Paydate < 01.01.2000 AND AccountCD = 005488);.

Результат выполнения запроса представлен на рис. 3.18.

PAYFACTCD

ACCOUNTCD

GAZSERVICECD

PAYSUM

PAYDATE

PAYMONTH

PAYYEAR

005488

56,000

06.05.1999

1999

115705

250,000

03.10.2001

2001

080047

80,000

21.11.2001

2001

443069

80,000

03.10.2001

2001

Рис. 3.18. Результат выполнения запроса к таблице PaySumma 3.2.3. Функции в SQL 3.2.3.1. Классификация функций

Функции SQL подобны любым другим запросам языка в том смысле, что они производят действия с данными и возвращают результат в качестве своего значения. Имеется два основных класса функций в СУБД Firebird: встроенные и определяемые пользователем.

Встроенными являются функции, предопределенные в языке SQL СУБД Firebird. В SQL определено множество встроенных функций различных категорий [16, 20, 21]. Эти функции делятся на три основные группы:

- скалярные функции;

- агрегатные функции;

- функции для списка значений.

Скалярные функции (их еще называют однострочными) обрабатывают одиночное значение и возвращают также одно значение. Скалярные функции разрешается использовать везде, где допускается применение выражений.

Скалярные функции бывают следующих категорий:

- строковые функции, которые выполняют определенные действия над строками и возвращают строковые или числовые значения;

- числовые функции, которые возвращают числовые значения на основании заданных в аргументе значений того же типа;

- функции времени и даты, которые выполняют различные действия над входными значениями времени и даты и возвращают строковое, числовое значение или значение в формате даты и времени;

- функция преобразования типа.



Особое место среди встроенных скалярных функций языка SQL занимают функции вывода, которые являются разновидностью CASE-выражений. В качестве функций вывода используются функции COALESCE, NULLIF, IIF и DECODE. Возвращаемый этими функциями результат меняется в зависимости от значения, которое обрабатывается функцией. Функции вывода будут подробно рассмотрены при изучении дополнительных возможностей выбора вариантов вывода в предложении SELECT.

Агрегатные функции используются для получения обобщающих значений. Они, в отличие от скалярных функций, оперируют значениями столбцов множества строк. К агрегатным функциям относятся такие функции, как SUM, вычисляющая итог, MAX и MIN, возвращающие наибольшее и наименьшее значения соответственно, AVG, вычисляющая среднее значение, и COUNT, вычисляющая количество значений в столбце.

Функции для списка значений представлены тремя функциями -

MAXVALUE, MINVALUE и LIST. Функции MAXVALUE и MINVALUE в чем-

то похожи на агрегатные функции MAX и MIN, однако выбирают максимальное и минимальное значение не из множества значений строк в одном столбце, а из значений, заданных в списке аргументов. Функция LIST объединяет обрабатываемые значения в единую строку.

Функции, определяемые пользователем (UDF), являются вспомогательными программами, написанными на языке программирования, таком как C, C++ или Pascal, и скомпилированными как совместно используемые двоичные библиотеки - DLL [18]. Внешние функции можно использовать в выражениях, так же как и встроенные функции SQL. Как и встроенные функции, они могут возвращать значения для переменных или выражений SQL в хранимых процедурах и триггерах.

СУБД Firebird поставляет две готовые к использованию библиотеки UDF: ib udf и fbudf. Firebird загружает UDF из библиотек, находящихся в каталоге udf каталога инсталляции или в других каталогах, указанных в параметре UdfAccess в файле конфигурации Firebird. Когда пользовательская функция написана, скомпилирована и инсталлирована в соответствующий каталог на сервере, она должна быть объявлена для базы данных, чтобы ее можно было использовать как функцию SQL. Для объявления внешней функции используется оператор DECLARE EXTERNAL FUNCTION. Можно объявить функцию также с использованием любого интерактивного инструмента SQL или скрипта. После того как функция будет объявлена для любой базы данных на сервере, содержащая ее библиотека будет загружаться при первом же обращении приложения к любой функции, включенной в эту библиотеку. Необходимо объявить каждую функцию, которую нужно использовать, для каждой базы данных, которая будет использоваться.

Рассмотрим подробнее встроенные функции СУБД Firebird 2.1.



3.2.3.2. Скалярные функции 3.2.3.2.1. Строковые функции

Эти функции используют в качестве аргумента строку символов, а в качестве результата возвращают также символьную строку или числовое значение.

Для выделения подстроки указанной длины из строкового выражения, начиная с заданной позиции, используется функция SUBSTRING, имеющая следующий формат:

SUBSTRING (<строковое выражение> FROM позиция [FOR длина]), где позиция - позиция, начиная с которой выполняется выделение, например 1 для первого символа в строке;

длина - количество выделяемых символов.

Например, для вывода номеров лицевых счетов абонентов и первых трех символов их фамилии можно использовать следующий запрос:

SELECT A.AccountCD, SUBSTRING (A.Fio FROM 1 for 3) AS Fio3

FROM Abonent A;.

Результат выполнения запроса представлен на рис. 3.19.

ACCOUNTCD

FIO3

005488

115705

015527

443690

136159

443069

136160

126112

136169

080613

080047

080270

Рис. 3.19. Результат работы функции SUBSTRING

Следует отметить, что в качестве аргументов позиция и длина в SUBSTRING можно использовать и выражения (в том числе со скалярными функциями, возвращающими числовой результат). Также в качестве аргументов SUBSTRING могут использоваться подзапросы, возвращающие единственное значение (<скалярный подзапрос>).

Следует учесть, что длина результата будет такой же, как и длина первого аргумента (<строковое выражение>, из которого выделяются символы). Длина поля Fio таблицы Abonent равна 20 [VARCHAR(20)], длина нового поля будет также иметь длину 20, а не 3 символа.



1 ... 21 22 23 [ 24 ] 25 26 27 ... 101

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика