Функции, используемых в базах данных SQL
Сведения о категориях встроенных функций, которые можно использовать с базами данных SQL. Вы можете использовать встроенные функции или создавать собственные пользовательские функции.
Агрегатные функции
Агрегатные функции выполняют вычисление на наборе значений и возвращают одиночное значение. Они допускаются в списке выбора или в предложении HAVING инструкции SELECT. Агрегатную функцию можно использовать в сочетании с предложением GROUP BY для статистических вычислений на основе категорий строк. Используйте предложение OVER для вычисления статистического значения на основе определенного диапазона значений. Предложение OVER не может следовать за агрегатными функциями GROUPING и GROUPING_ID.
Все агрегатные функции являются детерминированными. Это означает, что они всегда возвращают одинаковый результат для одинаковых входных значений. Дополнительные сведения см. в разделе Deterministic and Nondeterministic Functions.
Аналитические функции
Аналитические функции вычисляют статистическое значение на основе группы строк. Однако, в отличие от агрегатных функций, аналитические функции могут возвращать несколько строк для каждой группы. Аналитические функции можно использовать для вычисления скользящих средних, промежуточных итогов, процентных долей или первых N результатов в группе.
Функции поразрядной операции
Область применения: SQL Server 2022 (16.x)
Функции поразрядной операции позволяют обрабатывать и хранить данные более эффективно, чем при использовании отдельных битов. Дополнительные сведения см. в статье Функции поразрядной операции.
Ранжирующие функции
Ранжирующие функции возвращают ранжирующее значение для каждой строки в секции. В зависимости от используемой функции значения некоторых строк могут совпадать. Ранжирующие функции являются недетерминированными.
Функции наборов строк
Функции наборов строк возвращают объект, который можно использовать так же, как табличные ссылки в инструкции SQL.
Скалярные функции
Обрабатывают и возвращают одиночное значение. Скалярные функции можно применять везде, где выражение допустимо.
Категории скалярных функций
Категория функции | Description |
---|---|
Функции конфигурации | Возвращают сведения о текущей конфигурации. |
Функции преобразования | Поддержка приведения и преобразования типов данных. |
Функции работы с курсорами | Возвращают сведения о курсорах. |
Функции и типы данных даты и времени | Выполняют операции над исходными значениями даты и времени, возвращают строковые и числовые значения, а также значения даты и времени. |
Функции Graph | Выполняют операции для преобразования в символьные представления узлов графа и граничных идентификаторов. |
Функции JSON | Проверяют, запрашивают или изменяют данные JSON. |
Логические функции | Выполнение логических операций. |
Математические функции | Выполняют вычисления, основанные на числовых значениях, переданных функции в виде аргументов, и возвращают числовые значения. |
Функции метаданных | Возвращают сведения о базах данных и объектах баз данных. |
Функции безопасности | Возвращают данные о пользователях и ролях. |
Строковые функции | Выполняют операции со строковым (char или varchar) входным значением и возвращают строковое или числовое значение. |
Системные функции | Выполняйте операции и возвращайте сведения о значениях, объектах и параметрах в экземпляре SQL Server. |
Системные статистические функции | Возвращают статистические сведения о системе. |
Функции обработки текста и изображений | Выполняют операции над текстовыми или графическими исходными значениями или столбцами и возвращают сведения о значении. |
Детерминизм функций
Встроенные функции SQL Server являются детерминированными или недетерминированными. Функция является детерминированной, если для определенных входных значений она каждый раз возвращает один и тот же результат. Функция является недетерминированной, если она возвращает различные результаты даже для одних и тех же исходных значений. Дополнительные сведения см. в статье Детерминированные и недетерминированные функции.
Параметры сортировки функций
Функции, в которые вводится символьная строка и которые выдают ее, используют параметры сортировки входной строки для строки вывода.
Функции, которые обрабатывают несимвольные исходные данные и выдают символьную строку, применяют при выводе параметры сортировки по умолчанию для текущей базы данных.
Функции, обрабатывающие в качестве исходных данных несколько символьных строк и возвращающие символьную строку, задают параметры сортировки для строки вывода по правилам очередности параметров сортировки. Дополнительные сведения см. в разделе Очередность параметров сортировки (Transact-SQL).
Ограничения
Сведения об ограничениях типов функций и платформ см. в статье CREATE FUNCTION.
См. также
- CREATE FUNCTION (Transact-SQL)
- Детерминированные и недетерминированные функции
- Использование хранимых процедур (многомерные выражения)
Что такое функция sql
При составлении SQL запросов мы можем использовать встроенные функции. Например, если мы хотим вывести строку в верхнем регистре, то для этого мы можем использовать функцию UPPER .
MySQLSELECT UPPER("Hello world") AS upper_string;
upper_string HELLO WORLD Встроенная функция – реализованный в СУБД кусок кода, с помощью которого можно выполнять преобразования строковых, числовых и других данных в запросах.
Каждая функция принимает набор аргументов определённого типа, выполняет заложенные в неё операции и обязательно возвращает один из возможных литералов. Стоит отметить, что функции могут принимать как ноль аргументов, так и несколько.
Например, функция NOW() принимает ноль аргументов и возвращает литерал в формате даты, а LENGTH('sql-academy') принимает один строковый аргумент и возвращает числовой литерал «11».
Функций достаточно много, но основные всегда можно найти с помощью поиска в шапке или же на странице справочника функций.
Вот некоторые из них:
LOWER Возвращает строку, в которой все символы записаны в нижнем регистре
MySQLSELECT LOWER('SQL Academy') AS lower_string;
lower_string sql academy MySQLSELECT YEAR("2022-06-16") AS year;
MySQLSELECT INSTR('sql-academy', 'academy') AS idx;
MySQLSELECT LENGTH('sql-academy') AS str_length;
str_length 11 Функции можно применять не только над литералами, но и над значениями, взятыми из таблицы. При этом функция выполняет преобразования для каждой строки отдельно.
Например, давайте вернёмся к нашей базе данных и рассмотрим таблицу FamilyMembers : она содержит имя, статус и дату рождения людей.
Каждое значение этих полей мы можем изменить при выводе. Так нижележащий запрос высчитывает длину полного имени для каждого из членов семьи.
MySQLSELECT member_name, LENGTH(member_name) AS fullname_length FROM FamilyMembers;
member_name fullname_length Headley Quincey 15 Flavia Quincey 14 Andie Quincey 13 Lela Quincey 12 Annie Quincey 13 Ernest Forrest 14 Constance Forrest 17 Wednesday Addams 16 Поскольку мы знаем, что каждая функция должна вернуть какой-либо из возможных литералов, то её результат также можно использовать в дальнейших расчётах и преобразованиях.
К примеру, мы хотим получить первые три буквы в строке и преобразовать их в заглавные. Для этого нам будет достаточно скомбинировать две функции: LEFT и UPPER , где результат одной функции будет аргументом для второй.
MySQLSELECT UPPER(LEFT('sql-academy', 3)) AS str;
Или хотим вычислить длину фамилии человека, имея строку в формате имяфамилия . Одним из возможных способов вычисления длины фамилии может быть применение функций LENGTH и INSTR , используя формулу = - ( + ) :
- Значение можно получить с помощью функции LENGTH
- Для + нужно вычислить позицию символа, где заканчивается имя, и прибавить единицу, т.к. пробел имеет длину «1». Мы можем сделать это используя лишь функцию INSTR , ориентируясь на символ «пробел»
Так как обе функции возвращают числовые литералы, мы можем выполнять арифметические операции над ними. Давайте вычтем одно из другого и получим длину фамилии (lastname_length):
MySQLSELECT member_name, LENGTH(member_name) AS full_length, INSTR(member_name, ' ') AS firstname_with_space_length, LENGTH(member_name) - INSTR(member_name, ' ') AS lastname_length FROM FamilyMembers;
member_name full_length firstname_with_space_length lastname_length Headley Quincey 15 8 7 Flavia Quincey 14 7 7 Andie Quincey 13 6 7 Lela Quincey 12 5 7 Annie Quincey 13 6 7 Ernest Forrest 14 7 7 Constance Forrest 17 10 7 Wednesday Addams 16 10 6 Что такое функция sql
- create [or replace] function имя_функции — создает или заменяет функцию, если она существует, с заданным именем и параметрами;
- returns return_type — тип данных, который возвращает функция;
- язык plpgsql — указывает на процедурное расширение PostgreSQL;
- внутри знака $ является телом функции;
- declare — показывает, как объявляются или инициализируются переменные;
- блок кода [begin — end] — содержит всю логику функции;
- begin — указывает на начало запросов;
- end — указывает конец функции.
В следующем блоке кода показано создание простой функции, которая вычисляет стоимость самой дорогой покупки определенного пользователя.
Допустим, мы хотим запросить имя пользователя и его самые дорогие покупки. Можно написать несколько сложных запросов, которые вернут желаемый результат, однако мы можем использовать нашу функцию, определенную выше.
Во-первых, нам нужно выполнить сам запрос для создания нашей функции.
Как мы обсуждали ранее, хранимые процедуры немного отличаются от функций. Функции позволяют выполнять только Select-запросы, а хранимые процедуры позволяют выполнять Insert , Update , Delete операции. Хранимые процедуры очень удобны при работе со случаями, когда необходимы операции insert , update или delete .
Рассмотрим банковскую операцию — перевод. При выполнении какой-либо банковской операции деньги переводятся с одного счета на другой. Чтобы реализовать эту хранимую процедуру — transfer() , давайте создадим таблицу accounts и заполним ее.
Для вызова хранимой процедуры используется — call procedure_name() .
Сделаем условно перевод денег – 500 единиц с account.id = 3 на account.id = 4 и проверим результат.
Заключение
В этой статье мы рассмотрели:
- что такое функции и хранимые процедуры, а также их разницу;
- создание функции и процедуры;
- применение функций и процедур на реальных примерах;
Материалы по теме
- Руководство по SQL для начинающих. Часть 1: создание базы данных, таблиц и установка связей между таблицами
- Основные SQL-команды и запросы с примерами, которые должен знать каждый разработчик
- ️ Лучшие стратегии по работе с РСУБД: индексы, транзакции и уровни изоляции
Типы функций в языке T-SQL (Microsoft SQL Server)
Приветствую Вас на сайте Info-Comp.ru! В данном материале мы рассмотрим все типы функций, которые существуют в языке T-SQL.
Функция в базе данных – это подпрограмма внутри базы данных, реализующая определенный алгоритм.
В Microsoft SQL Server существуют следующие типы функций.
Пользовательские функции в T-SQL
Пользовательские функции (UDF – User Defined Functions) – это функции, которые создаём мы — пользователи, т.е. программисты T-SQL.
В Microsoft SQL Server пользовательские функции реализованы в виде объектов, которые хранят заложенный в функцию алгоритм. Обращаясь к этим объектам, мы, тем самым, запускаем этот алгоритм.
В функциях мы можем обращаться к данным и проводить различные расчеты, при этом мы можем программировать на T-SQL, т.е. использовать переменные, условные конструкции, циклы и даже вызывать другие функции.
В Microsoft SQL Server пользовательские функции делятся на несколько типов.
- Скалярные функции – это функции, которые возвращают одно значение заданного типа данных;
- Табличные функции – это функции, которые возвращают табличные данные, т.е. данные типа TABLE.
Встроенные функции T-SQL
Кроме пользовательских функций, которые создаём мы, в Microsoft SQL Server есть ещё и функции, которые созданы разработчиками СУБД с целью выполнения различных, часто встречающихся операций. Такие функции называется – встроенные функции.
В отличие от пользовательских функций, встроенные функции нельзя изменить и нельзя удалить.
В Microsoft SQL Server существует множество встроенных функций. Все их можно подразделить на группы по назначению.
Агрегатные функции
Агрегатные функции – это функции, которые выполняют определенное вычисление на наборе значений и возвращают одиночное значение.
Агрегатные функции обычно используются в сочетании с группировкой GROUP BY инструкции SELECT.
Все агрегатные функции являются детерминированными. Это означает, что они всегда возвращают одинаковый результат для одинаковых входных параметров.
К агрегатным функциям T-SQL относятся:
- AVG
- SUM
- MAX
- MIN
- COUNT
- COUNT_BIG
- APPROX_COUNT_DISTINCT
- CHECKSUM_AGG
- GROUPING
- GROUPING_ID
- STDEV
- STDEVP
- STRING_AGG
- VAR
- VARP
Строковые функции
Строковые функции – это функции, которые работают со строками, иными словами, с текстовыми значениями в столбце, т.е. выполняют различные операции над текстом.
Практически все встроенные строковые функции (кроме FORMAT) являются детерминированными.
К строковым функциям T-SQL относятся:
- LEN
- LEFT
- RIGHT
- LTRIM
- RTRIM
- TRIM
- LOWER
- UPPER
- SUBSTRING
- CONCAT
- CONCAT_WS
- ASCII
- CHAR
- NCHAR
- CHARINDEX
- REPLACE
- SPACE
- STR
- PATINDEX
- QUOTENAME
- и другие.
Математические функции
Математические функции – это функции, которые позволяют производить различные математические расчеты, как простые, так и сложные.
Все математические функции, кроме RAND, являются детерминированными.
Функции для работы с датой и временем
Это функции, которые позволяют работать с датой и временем.
- GETDATE
- DATENAME
- DATEPART
- DAY
- MONTH
- YEAR
- DATEDIFF
- DATEADD
- ISDATE
- и другие.
Функции преобразования
Функции преобразования – это функции, которые позволяют преобразовать значение одного типа данных в другой.
- CAST
- TRY_CAST
- CONVERT
- TRY_CONVERT
- PARSE
- TRY_PARSE
Логические функции
Логические функции позволяют выполнять логические операции. Иными словами, это что-то вроде условных конструкций, реализованных в виде функций.
Функции работы с курсорами
Такие функции возвращают сведения о курсорах.
Все функции работы с курсорами являются недетерминированными.
- @@CURSOR_ROWS
- @@FETCH_STATUS
- CURSOR_STATUS
Функции JSON
Такие функции предназначены для работы с форматом данных JSON.
- ISJSON
- JSON_VALUE
- JSON_QUERY
- JSON_MODIFY
Ранжирующие функции
Ранжирующие функции возвращают ранжирующее значение для каждой строки в секции набора данных. В зависимости от используемой функции значения некоторых строк могут совпадать. Ранжирующие функции являются недетерминированными.
Аналитические функции
Аналитические функции вычисляют статистическое значение на основе группы строк. Такие функции можно использовать для вычисления скользящих средних, промежуточных итогов, процентных долей, первых или последних строк в группе.
- FIRST_VALUE
- LAST_VALUE
- LAG
- LEAD
- PERCENT_RANK
- PERCENTILE_CONT
- PERCENTILE_DISC
- CUME_DIST
Функции конфигурации
Функции конфигурации – это функции, которые возвращают сведения о текущих значениях параметров конфигурации.
Все функции конфигурации являются недетерминированными.
- @@DATEFIRST
- @@DBTS
- @@LANGID
- @@LANGUAGE
- @@LOCK_TIMEOUT
- @@MAX_CONNECTIONS
- @@MAX_PRECISION
- @@NESTLEVEL
- @@OPTIONS
- @@REMSERVER
- @@SERVERNAME
- @@SERVICENAME
- @@SPID
- @@TEXTSIZE
- @@VERSION
Функции метаданных
Функции метаданных – это функции, которые возвращают сведения о базах данных и объектах баз данных. Все функции метаданных являются недетерминированными.
- VERSION
- DB_ID
- DB_NAME
- FILE_ID
- FILE_NAME
- APP_NAME
- OBJECT_ID
- OBJECT_NAME
- SCHEMA_ID
- SCHEMA_NAME
- SCOPE_IDENTITY
- TYPE_ID
- TYPE_NAME
- PARSENAME
- SERVERPROPERTY
- и другие.
Заметка! Всем тем, кто только начинает свое знакомство с языком SQL, рекомендую прочитать книгу «SQL код» – это самоучитель по языку SQL для начинающих программистов. В ней очень подробно рассмотрены основные конструкции языка.
Функции безопасности
Функции безопасности – это функции, которые возвращают данные о пользователях и ролях. Иными словами, такие функции возвращают сведения, необходимые для управления безопасностью.
- IS_MEMBER
- IS_ROLEMEMBER
- IS_SRVROLEMEMBER
- SUSER_SNAME
- SYSTEM_USER
- SUSER_NAME
- USER_ID
- USER_NAME
- SUSER_SID
- SESSION_USER
- CURRENT_USER
- и другие.
Системные функции
Системные функции – это функции, которые выполняют операции над значениями, объектами и параметрами экземпляра Microsoft SQL Server и возвращают сведения о них.
Системные статистические функции
Такие функции возвращают статистические сведения о системе. Все системные статистические функции являются недетерминированными.
- @@CONNECTIONS
- @@PACK_RECEIVED
- @@CPU_BUSY
- @@PACK_SENT
- fn_virtualfilestats
- @@TIMETICKS
- @@IDLE
- @@TOTAL_ERRORS
- @@IO_BUSY
- @@TOTAL_READ
- @@PACKET_ERRORS
- @@TOTAL_WRITE
На сегодня это все, надеюсь, материал был Вам полезен, пока!