имеет в своем арсенале весьма незначительный набор стандартных функций, которые можно использовать в запросах. Это связано с тем, что, во-первых, основным достоинством является малый объем сервера, и низкие требования к аппаратному обеспечению, что позволяет использовать практически на любом компьютере. А во-вторых, предоставляет очень привлекательную возможность для программиста создавать собственные функции (
Стандартные функции представлены в таблице 23.1:
| Функция | Тип | Назначение |
|---|---|---|
| AVG () | Агрегатная | Вычисляет и возвращает среднее значение из набора записей. |
| Агрегатная | Подсчитывает и возвращает количество записей, удовлетворяющих |
|
| Агрегатная | Находит и возвращает максимальное значение из набора записей. | |
| Агрегатная | Находит и возвращает минимальное значение из набора записей. | |
| Агрегатная | Суммирует значения всех записей и возвращает результат. | |
| Преобразование | Преобразует значение столбца из одного типа данных в другой. | |
| Преобразование | Преобразует все символы строки в верхний регистр. | |
| Числовая | Возвращает (и увеличивает) значение генератора. |
С большинством из этих функций мы уже сталкивались, разберем их синтаксис подробней, и опробуем на примерах. Для этого откроем утилиту (сервер должен быть запущен), откроем в нем нашу базу First.gdb и запустим . Примеры из запросов будем делать в этом окне.
Если число строк, возвращенных запросом SELECT равно 0, то
AVG([ALL] <столбец|выражение> | DISTINCT <столбец|выражение>);
Если указан необязательный параметр ALL (по умолчанию), то среднее арифметическое значение вычисляется из всех столбцов или выражения. Если же указан параметр
SELECT AVG(Stoimost) FROM Tovar
Функция подсчитывает и возвращает количество записей, удовлетворяющих
COUNT ([DISTINCT] <имя_поля>);
Если указан необязательный параметр вы получите результат только последнего примера - каждая новая выборка будет перекрывать результат работы предыдущей выборки):
/*Количество всех записей:*/ SELECT COUNT(Nazvanie) FROM Tovar; /*То же самое, но исключив повторяющиеся значения:*/ SELECT COUNT(DISTINCT Stoimost) FROM Tovar; /*Количество всех записей, удовлетворяющих условию:*/ SELECT COUNT(Nazvanie) FROM Tovar WHERE Stoimost = 10;
Если
Синтаксис:
MAX([ALL] <столбец|выражение> | DISTINCT <столбец|выражение>); MIN([ALL] <столбец|выражение> | DISTINCT <столбец|выражение>);
Примеры:
/*Максимальное и минимальное значения из числового столбца стоимости товаров:*/ SELECT MAX(Stoimost), MIN(Stoimost) FROM Tovar; /*Максимальное и минимальное значения из строкового столбца с названием товаров:*/ SELECT MAX(Nazvanie), MIN(Nazvanie) FROM Tovar;
Функция возвращает сумму всех значений из столбца таблицы или из выражения. Как и в предыдущих примерах, значения NULL автоматически исключаются из расчетов, а если количество строк в указанном наборе данных будет равно нулю, функция вернет NULL.
Синтаксис:
SUMM([ALL] <столбец|выражение> | DISTINCT <столбец|выражение>);
Пример:
/*Сумма всех значений из числового столбца стоимости товаров:*/ SELECT SUM(Stoimost) FROM Tovar;
Функция позволяет преобразовывать один тип данных в другой, или трактовать его, как другой тип данных. Функцию удобно использовать в запросах, которые смешивают данные разных типов в одном поле. Также
Типы данных, преобразуемые функцией
| Исходный тип данных | Возможный для преобразования тип данных |
|---|---|
| NUMERIC | CHAR, VARCHAR, DATE |
| CHAR, VARCHAR | NUMERIC, DATE |
| DATE | CHAR, VARCHAR, DATE |
Под типом данных NUMERIC подразумеваются целые и вещественные числовые типы.
Синтаксис:
CAST(<поле | значение> AS <тип_данных>)
Пример:
/*Вывод в одном поле объединенных значений строкового столбца Nazvanie */ /*и числового поля Stoimost, преобразованного в строку:*/ SELECT Nazvanie || ' - ' || CAST(Stoimost AS VARCHAR(25)) FROM Tovar;
В примере использован символ конкатенации (объединения) строк "||", вторая часть строки преобразуется функцией .
Преобразует все символы строки к верхнему регистру. Если набор символов и порядок сортировки поддерживают такое преобразование, функция
Как уже говорилось в предыдущей лекции, функция корректно преобразует строки с русскими буквами только в том случае, если установлен набор символов для строки WIN1251, а порядок сортировки PXW_CYRL.
Синтаксис:
UPPER(<значение>);
Поскольку у нас в базе данных все символьные столбцы создавались с набором WIN1251 и порядком сортировки PXW_CYRL, то функция сработает правильно. Для наглядности в примере ниже мы выведем один и тот же столбец дважды, в первом случае не изменяя порядок сортировки, чтобы функция корректно перевела символы в верхний регистр. А во втором поле порядок сортировки изменим на WIN1251, чтобы функция не смогла сделать преобразование:
SELECT UPPER(Nazvanie), UPPER(Nazvanie COLLATE WIN1251) FROM Tovar;
В результате мы получим примерно такой набор данных:
(рис 23.1 ) Преобразование функцией UPPER строк с различным порядком сортировкиКак видно из примера, текст с набором символов WIN1251 и порядком сортировки WIN1251 возвращается функцией
Функция является механизмом, увеличивающим значение указанного генератора на указанный шаг, и возвращающим текущее значение этого генератора. Если шаг равен 0, увеличения значения не происходит. Синтаксис:
CEN_ID(<генератор>, <шаг>);
Работу этой функции мы достаточно подробно рассмотрели в лекции № 20.
В практике программирования нередко встречаются ситуации, когда программисту недостаточно того набора функций, который предоставлен сервером . К счастью, дает возможность создавать и подключать к базе данных собственные функции, которые называются User Defined Functions - Функции, определенные пользователем). Прелесть этого механизма в том, что такие функции можно написать на любом языке программирования, включая Delphi,
который позволяет делать библиотеки - Динамически подключаемые библиотеки). Программист может реализовать в одном или нескольких . Останется только подключить описанные функции к рабочей базе данных, после чего любую из этих функций можно использовать в запросах на любых клиентских ПК.
Для демонстрации этой возможности как нельзя лучше подойдет функция Upper_Rus, описанная В.В.Фароновым в книге "Программирование баз данных в Delphi7. Учебный курс". Функция преобразует все символы строки в верхний регистр, но в отличие от стандартной Upper, она корректно сработает и с другими наборами символов и порядком сортировки.
Для начала нам нужно создать Delphi. В нашем случае нам нужно будет создать отдельный Delphi запускает автоматически. Затем выберем команду < File -> New -> Other >. Откроется окно, в котором на вкладке New нам нужно выбрать
(рис 23.2 ) Выбор "мастера" DLLПри этом откроется окно модуля без всяких форм, которое содержит лишь следующий код (комментарии опущены):
library Project1;
uses
SysUtils,
Classes;
{$R *.res}
begin
end.
Выберем команду < File -> Save All >, где нам предложат сохранить проект без всяких модулей. Создайте для проекта отдельную папку, а проект назовите Udf_Dll. Далее приводится весь код библиотеки Udf_Dll (без комментариев):
library Udf_Dll;
uses
SysUtils, Classes;
{$R *.res}
function Upper_Rus(InpString: PChar): PChar; cdecl;
//Функция преобразует буквы входной строки в заглавные
begin
Result := PChar(ANSIUpperCase(String(InpString)));
end;
exports Upper_Rus;
begin
end.
Поскольку это Udf_Dll.dll.
В приведенном выше коде мы создали функцию Upper_Rus, которая имеет входной и выходной строковые параметры типа Windows ). Кроме того, для правильной работы с , эта экспортируемая функция задекларирована как cdecl (соглашение о передаче входных параметров). В теле функции WinAPI ANSIUpperCase, благодаря чему ЛЮБОЙ набор символов (не обязательно русский) будет корректно преобразован в верхний регистр.
В конце мы указываем, что описанная функция Upper_Rus предназначена для экспорта.
Delphi можно закрыть. Полученный файл динамической библиотеки Udf_Dll.dll скопируйте в каталог (по умолчанию - C:\Program Files\Borland\ его не найдет.
Теперь эту функцию нужно зарегистрировать в базе данных First (сервер должен быть запущен, утилита открыта, база данных First выделена и запущена утилита ). В окне запросов укажите следующий запрос:
DECLARE EXTERNAL FUNCTION UPPER_RUS CSTRING(256) RETURNS CSTRING(256) ENTRY_POINT 'Upper_Rus' MODULE_NAME 'UDF_DLL'; COMMIT;
Здесь указан тип строк Delphi, и установлено ограничение в 256 символов. Теперь, если вы посмотрите в дереве серверов в разделе " External Functions " нашей БД First, вы увидите зарегистрированную функцию
В мы можем ввести запрос, показывающий разницу между стандартной функцией , или хотя бы закрытие ( ) и открытие ( Connect ) базы данных First ):
SELECT UPPER(Nazvanie COLLATE WIN1251), UPPER_RUS(Nazvanie COLLATE WIN1251) FROM Tovar;
(рис 23.3 ) Разница работы стандартной UPPER и UPPER_RUSКак видно из рисунка, там, где стандартная функция First на любом пользовательском ПК, который подключен к .
Для получения официальных документов о завершении программы дополнительного профессионального образования (удостоверения о повышении квалификации, дипломов о профессиональной переподготовке и MBA) необходимо предоставить:
Внимание! Вы можете не заказывать доставку бумажной версии официального документы, а скачать его в электронном виде и распечатать самостоятельно. Информация о выданном документе в течение 1 месяца загружается в Федеральную информационную систему «Федеральный реестр сведений о документах об образовании и (или) о квалификации, документах об обучении» - ФИС ФРДО.
Доступ на новый сайт осуществляется с использованием адреса электронной почты, который был указан вами при регистрации на "старом". Мы постарались перенести все ваши данные с прежнего ресурса, однако не исключена вероятность потери части информации.
При возникновении проблемы со входом, воспользуйтесь функцией сброса пароля
Если вы обнаружите несоответствия, пожалуйста, сообщите нам.