Перейти к содержимому

Какой функции нет в sql

  • автор:

Логические функции — LEAST (Transact-SQL)

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

Синтаксис

LEAST ( expression1 [ , . expressionN ] ) 

Аргументы

expression1, expressionN

Список выражений любого сопоставимого типа данных, разделенный запятыми. Функция LEAST требует по меньшей мере один аргумент, но не более 254 аргументов.

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

Типы возвращаемых данных

Возвращает тип данных с наивысшим приоритетом из переданного функции набора типов. Дополнительные сведения см. в разделе Приоритет типов данных (Transact-SQL).

Если все аргументы имеют одинаковый тип данных и тип поддерживается для сравнения, LEAST возвращает этот тип.

В противном случае функция перед сравнением неявно приводит все аргументы к типу данных с наивысшим приоритетом и использует его как тип возвращаемого значения.

Для числовых типов масштаб типа возвращаемого значения будет соответствовать масштабу аргумента, имеющего тип данных с наивысшим приоритетом, либо наибольшему масштабу, если таких аргументов несколько.

Замечания

Все выражения в списке аргументов должны иметь сопоставимый тип данных, который может быть неявно преобразован в тип аргумента с наивысшим приоритетом.

Перед сравнением выполняется неявное приведение всех аргументов к типу данных с наивысшим приоритетом.

Если неявное преобразование типов между аргументами не поддерживается, функция завершится ошибкой и возвращает ошибку.

Дополнительные сведения о явном и неявном преобразовании см. в статье Преобразование типов данных (ядро СУБД).

Если один или несколько аргументов не NULL являются, NULL то аргументы игнорируются во время сравнения. Если все аргументы являются NULL , возвращается NULL LEAST .

Сравнение символьных аргументов осуществляется в соответствии с правилами, приведенными в статье Очередность параметров сортировки.

Для сравнения не поддерживаются следующие типы: varchar(max), varbinary(max) или nvarchar(max) превышающие 8000 байт, курсор, геометрия , география, география, изображение, неупорядоченные пользователем типы, ntext, table, text и xml. LEAST

Типы данных varchar(max), varbinary(max)и nvarchar(max) поддерживаются для аргументов, 8000 байт или меньше, и будут неявно преобразованы в varchar(n), varbinary(n)и nvarchar(n), соответственно, перед сравнением.

Например, varchar(max) может поддерживать до 8000 символов, если используется набор символов с одним байтом, а nvarchar(max) может поддерживать до 4000 байт-пар (при условии кодировки символов UTF-16).

Примеры

А. Возвращает максимальное значение из списка констант

В следующем примере возвращается минимальное значение из указанного списка констант.

Масштаб типа возвращаемого значения определяется масштабом аргумента с типом данных, имеющим наивысший приоритет.

SELECT LEAST('6.62', 3.1415, N'7') AS LeastVal; GO 
LeastVal ------- 3.1415 (1 rows affected) 

B. Возвращает минимальное значение из списка типов символов

В следующем примере возвращается минимальное значение из указанного списка символьных констант.

SELECT LEAST('Glacier', N'Joshua Tree', 'Mount Rainier') AS LeastString; GO 
LeastString ------------- Glacier (1 rows affected) 

C. Возвращает минимальное значение из списка аргументов столбцов

Этот пример возвращает минимальное значение из списка аргументов столбца и при сравнении игнорирует значения NULL . В этом примере используется база данных AdventureWorksLT , которую можно быстро установить в качестве образца базы данных для нового экземпляра Базы данных SQL Azure. Дополнительные сведения см. в разделе Образцы баз данных AdventureWorks.

SELECT P.Name, P.SellStartDate, P.DiscontinuedDate, PM.ModifiedDate AS ModelModifiedDate, LEAST(P.SellStartDate, P.DiscontinuedDate, PM.ModifiedDate) AS EarliestDate FROM SalesLT.Product AS P INNER JOIN SalesLT.ProductModel AS PM ON P.ProductModelID = PM.ProductModelID WHERE LEAST(P.SellStartDate, P.DiscontinuedDate, PM.ModifiedDate) >= '2007-01-01' AND P.SellStartDate >= '2007-01-01' AND P.Name LIKE 'Touring %' ORDER BY P.Name; 

Результирующий набор: EarliestDate выбирает наименьшее значение даты трех значений, игнорируя NULL .

Name SellStartDate DiscontinuedDate ModelModifiedDate EarliestDate ---------------------- ----------------------- ------------------- ----------------------- ----------------------- Touring Pedal 2007-07-01 00:00:00.000 NULL 2009-05-16 16:34:29.027 2007-07-01 00:00:00.000 Touring Tire 2007-07-01 00:00:00.000 NULL 2007-06-01 00:00:00.000 2007-06-01 00:00:00.000 Touring Tire Tube 2007-07-01 00:00:00.000 NULL 2007-06-01 00:00:00.000 2007-06-01 00:00:00.000 (3 rows affected) 

D. Использование LEAST с локальными переменными

В этом примере с помощью LEAST определяется минимальное значение из списка локальных переменных в предикате предложения WHERE .

CREATE TABLE dbo.Studies ( VarX VARCHAR(10) NOT NULL, Correlation DECIMAL(4, 3) NULL ); INSERT INTO dbo.Studies VALUES ('Var1', 0.2), ('Var2', 0.825), ('Var3', 0.61); GO DECLARE @PredictionA DECIMAL(2, 1) = 0.7; DECLARE @PredictionB DECIMAL(3, 1) = 0.65; SELECT VarX, Correlation FROM dbo.Studies WHERE Correlation < LEAST(@PredictionA, @PredictionB); GO 

Результирующий набор: Отображаются только значения меньше 0,65.

VarX Correlation ---------- ----------- Var1 .200 Var3 .610 (2 rows affected) 

Д. Использование LEAST с столбцами, константами и переменными

В этом примере с помощью LEAST определяется минимальное значение из списка, содержащего столбцы, константы и переменные.

CREATE TABLE dbo.Studies ( VarX VARCHAR(10) NOT NULL, Correlation DECIMAL(4, 3) NULL ); INSERT INTO dbo.Studies VALUES ('Var1', 0.2), ('Var2', 0.825), ('Var3', 0.61); GO DECLARE @VarX DECIMAL(4, 3) = 0.59; SELECT VarX, Correlation, LEAST(Correlation, 1.0, @VarX) AS LeastVar FROM dbo.Studies; GO 
VarX Correlation LeastVar ---------- --------------------- --------------------- Var1 0.200 0.200 Var2 0.825 0.590 Var3 0.610 0.590 (3 rows affected) 

Следующие шаги

  • GREATEST (Transact-SQL)
  • MAX (Transact-SQL)
  • MIN (Transact-SQL)
  • CASE (Transact-SQL)
  • CHOOSE (Transact-SQL)

Функции, используемых в базах данных 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)
  • Детерминированные и недетерминированные функции
  • Использование хранимых процедур (многомерные выражения)

Clickhouse — оконные функции, которых нет…

Работу с колоночными базами данных я начал с BigQuery. Когда пришлось “переехать” на Clickhouse я был неприятно удивлен фактом отсутствия полноценных оконных функций. Есть, конечно, множество функций по работе с массивами, функций высшего порядка и прочие функции (одна функция runningDifferenceStartingWithFirstValue чего стоит). Сразу на ум приходит победитель 1999 года на звание самого длинного слова Donaudampfschifffahrtsgesellschaftskapitänswitwe. Что в переводе с немецкого означает «вдова капитана пароходного общества на Дунае».

Поиск по словосочетанию “оконные функции в Clickhouse” не дает вразумительных результатов. Эта статья является попыткой обобщить разрозненные данные из интернета, примеры с ClickHouseMeetup и собственный опыт.

Оконные функции — синтаксис

Напомню синтаксис оконных функций и вид результата, который мы получим. В примерах будем использовать диалект Standart SQL Google BigQuery. Вот ссылка на документацию об оконных функциях (в документации они называются analytic function — более точный перевод звучит как аналитические функции). А здесь сам список функций.

Обобщенный синтаксис выглядит так:

analytic_function_name ( [ argument_list ] ) OVER over_clause over_clause: < named_window | ( [ window_specification ] ) >window_specification: [ named_window ] [ PARTITION BY partition_expression [, . ] ] [ ORDER BY expression [ < ASC | DESC >] [, . ] ] [ window_frame_clause ] window_frame_clause: < rows_range > < frame_start | frame_between >rows_range:

Разберем по шагам:

  1. Оконная функция применяется к набору записей, определенному в выражении over_clause,
  2. Набор записей определяется конструкцией PARTITION BY. Здесь можно перечислить одно или несколько полей, по которым будет определяться набор записей. Работает аналогично GROUP BY.
    Сортировка записей в рамках набора определяется с помощью ORDER BY.
  3. На предварительно определенный набор записей можно дополнительно наложить ограничение в виде окна. Окно можно определить статически. Например, можно брать в качестве окна можно брать 5 записей, 2 до и 2 после текущей записи и саму текущую запись. Выглядеть это будет так: ROWS BETWEEN 2 PRECEDING AND 2 FOLLOWING.
    Пример конструкции для задания динамически определяемого окна выглядит так — RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW. Эта конструкция определяет окно от первой до текущей записи в соответствии с заданным порядком сортировки.
SELECT item, purchases, category, SUM(purchases) OVER ( PARTITION BY category ORDER BY purchases ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW ) AS total_purchases FROM Produce
+-------------------------------------------------------+ | item | purchases | category | total_purchases | +-------------------------------------------------------+ | orange | 2 | fruit | 2 | | apple | 8 | fruit | 10 | | leek | 2 | vegetable | 2 | | cabbage | 9 | vegetable | 11 | | lettuce | 10 | vegetable | 21 | | kale | 23 | vegetable | 44 | +-------------------------------------------------------+ 

Что можно сделать в Clickhouse

Попробуем повторить этот пример в ClickHouse. Конечно, в ClickHouse есть функции runningAccumulate, arrayCumSum и groupArrayMovingSum. Но в первом случае нужно определять состояние в подзапросе (подробнее), а во втором случае функция возвращает array, который затем нужно развернуть.

Мы сконструируем самый общий запрос. Сам запрос может выглядеть так:

SELECT items, summ as purchases, category, sumArray(cum_summ) as total_purchases FROM (SELECT category, groupArray(item) AS items, groupArray(purchases) AS summ, arrayMap(x -> arraySlice(summ, 1, x), arrayEnumerate(summ)) AS cum_summ FROM (SELECT item, purchases, category FROM produce ORDER BY category, purchases) GROUP BY category) ARRAY JOIN items, summ, cum_summ GROUP BY category, items, summ ORDER BY category, purchases

Разберем по шагам:

  1. Сначала конструируем подзапрос, внутри которого происходит нужная сортировка данных (ORDER BY category, purchases). Сортировка должна соответствовать полям в выражениях PARTITION BY и ORDER BY оконной функции.
  2. Далее выполняем группировку в массивы всех полей, которые есть в запросе, но не упомянуты в PARTITION BY. В нашем случае поле item будет свернуто в массив на этом шаге и развернуто без изменений на следующем.
    Поле purchases также будет свернуто на этом шаге и развернуто на следующем, но его агрегат summ будет использован в конструкторе нового поля.
  3. Самое интересное — использование функции ArrayMap. Эта функция возвращает массив, полученный на основе результатов применения функции func к каждому элементу массива arr.
    В нашем случае массив arr — это массив массив [1, 2, …, length(summ)], который генерирует функция arrayEnumerate.
    А функция func — это arraySlice(summ, 1, x), где единственным аргументом выступает x — элемент массива arr, описанного выше. Функция возвращает массив из элементов массива summ начиная с первого и длиной x. Таким образом, в поле cum_sum мы получим массив, в котором каждый элемент представляет собой также массив, сумма элементов которого и будет искомой оконной функцией.

Применяя ArrayMap с функцией arrayEnumerate мы определяем окно, ограничивающее значения, над которыми будет работать агрегатная функция. Ниже пример окна статического размера (размер 3), аналог конструкции ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING.

arrayMap(x -> arraySlice(summ, if(x-1 > 0, x-1, 1), if(x-1 > 0, 3, 2)), arrayEnumerate(summ))

Здесь нужно сделать замечание, относительно функций по работе с массивами. Есть 2 класса таких функций в ClickHouse:

  • Функции высшего порядка — особенностью этих функций является невозможность вызова функции внутри функции[edited]возможность вызова функции внутри функции — см. комментарии[/edited]. То есть нельзя напрямую использовать, скажем, функцию arrayMap в качестве аргумента функции arrayFilter. Читаемость кода будет снижаться при вызове ФВП внутри ФВП. Но выход есть — можно на предыдущей (или последующей — без разницы) строке задать синоним (alias) для результата выполнения arrayMap, а затем этот синоним использовать в качестве аргумента функции arrayFilter в том же запросе.
  • Функции по работе с массивами — здесь ограничений нет. Можно легко использовать, например, функцию arrayReverse в качестве аргумента функции arraySlice.

Вывод

Есть возможность эмулировать работу оконных функций в ClickHouse. Не очень быстро и не очень красиво. Кратко пайплан состоит из 3-х шагов:

  1. Запрос с сортировкой. На этом шаге идет подготовка набора записей.
  2. Группировка в массивы и выполнение операций с массивом. На этом шаге определяется окно нашей оконной функции.
  3. Обратное развертывание в таблицу с применение агрегатных функций.

Функции Transact-SQL

Функции языка Transact-SQL могут быть агрегатными или скалярными. Эти типы функций рассматриваются в этой статье.

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

Агрегатные функции выполняют вычисления над группой значений столбца и всегда возвращают одно значение результата этих вычислений. Язык Transact-SQL поддерживает несколько обычных агрегатных функций:

AVG

Вычисляет среднее арифметическое значение данных, содержащихся в столбце. Значения, над которыми выполняется вычисление, должны быть числовыми.

MIN и MAX

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

SUM

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

COUNT

Подсчитывает количество значений, отличных от null в столбце. Функция count(*) является единственной агрегатной функцией, которая не выполняет вычисления над столбцами. Эта функция возвращает количество строк (независимо от того, содержат ли отдельные столбцы значения null).

COUNT_BIG

Аналогична функции count, с той разницей, что возвращает значение данных типа BIGINT.

Использование обычных агрегатных функций в инструкции SELECT будет рассматриваться в одной из следующих статей.

Скалярные функции

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

  • числовые функции;
  • функции даты;
  • строковые функции;
  • системные функции;
  • функции метаданных.

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

Числовые функции

Числовые функции языка Transact-SQL - это математические функции для модифицирования числовых значений. Список числовых функций и их краткое описание приводится в таблице ниже:

Возвращает абсолютное значение (т. е. отрицательные значения возвращаются, как положительные) числового выражения n.

SELECT ABS(-5.320) -- Вернет 5.320 SELECT ABS(8.90) -- Вернет 8.90

Обратные тригонометрические функции, вычисляющие арккосинус, арксинус, арктангенс значения n (для ATN2 вычисляется арктангенс n/m). Исходные значения n, m и результат имеют тип данных FLOAT.

Тригонометрические функции, вычисляющие косинус, синус, тангенс, котангенс значения n. Результат имеет тип данных FLOAT.

Функция DEGREES преобразует радианы в градусы, RADIANS соответственно наоборот.

SELECT DEGREES(PI() / 4) -- Вернет 45 SELECT COS(RADIANS(60.0)) -- Вернет 0.5

Округляет число до большего целого значения.

SELECT CEILING(-5.320) -- Вернет -5 SELECT CEILING(8.90) -- Вернет 9

Округляет значение n с точностью до p. Когда аргумент p положительное число, округляется дробная часть числа n, а когда отрицательное - целая часть. При использовании необязательного аргумента t, число n не округляется, а усекается (т.е. округляется в меньшую сторону).

SELECT ROUND(5.3208, 3) -- Вернет 5.3210 SELECT ROUND(125.384, -1) -- Вернет 130.000 SELECT ROUND(125.384, -1, 1) -- Вернет 120.000

Округляет до меньшего целого значения.

SELECT FLOOR(5.88) -- Вернет 5

Вычисляет значение e n .

LOG(n) - вычисляет натуральный логарифм (т.е. с основанием e) числа n, LOG10(n) - вычисляет десятичный (с основанием 10) логарифм числа n.

Возвращает значение π (3,1415).

Вычисляет значение x y .

Возвращает произвольное число типа FLOAT в диапазоне значений между 0 и 1.

Возвращает количество строк таблицы, которые были обработаны последней инструкцией Transact-SQL, исполненной системой. Возвращаемое значение имеет тип BIGINT.

Возвращает знак значения n в виде числа: +1, если положительное, -1, если отрицательное.

SQRT(n) - вычисляет квадратный корень числа n, SQUARE(n) - возвращает квадрат аргумента n.

Функции даты

Функции даты вычисляют соответствующие части даты или времени выражения или возвращают значение временного интервала. Поддерживаемые в Transact-SQL функции даты и их краткое описание приводятся в таблице ниже:

Возвращает текущую системную дату и время.

SELECT GETDATE()

Возвращает указанную в параметре item часть даты date в виде целого числа.

-- Вернет 1 (Январь) SELECT DATEPART(month, '01.01.2012') -- Вернет 4 (Wednesday) SELECT DATEPART(weekday, '02.01.2012')

Возвращает указанную в параметре item часть даты date в виде строки символов.

-- Вернет January SELECT DATENAME(month, '01.01.2012') -- Вернет Wednesday SELECT DATENAME(weekday, '02.01.2012')

Вычисляет разницу между двумя частями дат dat1 и dat2 и возвращает целочисленный результат в единицах, указанных в аргументе item.

-- Вернет 19 (19 лет промежуток между датами) SELECT DATEDIFF(year, '01.01.1990', '01.01.2010') -- Вернет 7305 (7305 дней промежуток между датами) SELECT DATEDIFF(day, '01.01.1990', '01.01.2010')

Прибавляет n-е количество единиц, указанных в аргументе item к указанной дате date. (Значение аргумента n также может быть отрицательным.)

-- Прибавит 3 дня к текущей дате SELECT DATEADD(day, 3, GETDATE())

Строковые функции

Строковые функции манипулируют значениями столбцов, которые обычно имеют символьный тип данных. Поддерживаемые в Transact-SQL строковые функции и их краткое описание приводятся в таблице ниже:

Преобразовывает указанный символ в соответствующее целое число кода ASCII.

SELECT ASCII('W') -- 87 SELECT UNICODE('ю') -- 1102

Преобразовывает код ASCII (или Unicode если NCHAR) в соответствующий символ.

SELECT CHAR(87) -- 'W' SELECT NCHAR(1102) -- 'ю'

Возвращает начальную позицию вхождения подстроки str1 в строку str2. Если строка str2 не содержит подстроки str1, возвращается значение 0

-- Вернет 5 SELECT CHARINDEX ('морф', 'полиморфизм')

Возвращает целое число от 0 до 4, которое является разницей между значениями SOUNDEX двух строк str1 и str2. Метод SOUNDEX возвращает число, которое характеризует звучание строки. С помощью этого метода можно определить подобно звучащие строки. Работает только для символов ASCII.

-- Вернет 2 SELECT DIFFERENCE ('spelling', 'telling')

Возвращает количество первых символов строки str, заданное параметром length для LEFT и последние length символов строки str для функции RIGHT.

DECLARE @str nvarchar(30) = 'Синхронизация'; -- Вернет 'Синх' SELECT LEFT(@str, 4) -- Вернет 'зация' SELECT RIGHT(@str, 5)

Возвращает количество символов (не количество байт) строки str, указанной в аргументе, включая конечные пробелы.

Функция LOWER преобразовывает все прописные буквы строки str1 в строчные. Входящие в строку строчные буквы и иные символы не затрагиваются. Функция UPPER преобразовывает все строчные буквы строки str в прописные.

DECLARE @str nvarchar(30) = 'Синхронизация'; -- Вернет 'СИНХРОНИЗАЦИЯ' SELECT UPPER(@str) -- Вернет 'синхронизация' SELECT LOWER(@str)

Функция LTRIM удаляет начальные пробелы в строке str, RTRIM соответственно удаляет пробелы в конце строки.

Возвращает строку в кодировке Unicode с добавленными ограничителями, чтобы преобразовать строку ввода в действительный идентификатор с ограничителями.

DECLARE @str nvarchar(30) = 'Синхронизация'; -- Вернет '[Синхронизация]' SELECT QUOTENAME(@str)

Возвращает начальную позицию первого вхождения шаблона p в заданное выражение expr, или ноль, если данный шаблон не обнаружен.

-- Вернет 4 SELECT PATINDEX('%хро%', 'Синхронизация')

Заменяет все вхождения подстроки str2 в строке str1 подстрокой str3.

-- Вернет 'Десинхронизация' SELECT REPLACE('Синхронизация', 'Синхр', 'Десинхр')

Повторяет i раз строку str.

-- Вернет 'aBaBaBaBaB' SELECT REPLICATE('aB', 5)

Выводит строку str в обратном порядке.

-- Вернет 'яицазинорхниС' SELECT REVERSE('Синхронизация')

Возвращает четырехсимвольный код soundex, используемый для определения похожести двух строк. Работает только для символов ASCII.

Возвращает строку пробелов длиной, указанной в параметре length. Аналог REPLICATE(' ', length).

Преобразовывает заданное выражение с плавающей точкой f в строку, где len - длина строки, включая десятичную точку, знак, цифры и пробелы (по умолчанию равно 10), а d - число разрядов дробной части, которые нужно возвратить.

-- Вернет '3.14' SELECT STR (3.1415, 4, 2) 

Удаляет из строки str1 length-символов, начиная с позиции a, и вставляет на их место строку str2.

-- Note in a book SELECT STUFF('Notebook', 5, 0,' in a ') -- Handbook SELECT STUFF('Notebook', 1, 4, 'Hand') 

Извлекает из строки str, начиная с позиции a, подстроку длиной length.

Системные функции

Системные функции языка Transact-SQL предоставляют обширную информацию об объектах базы данных. Большинство системных функций использует внутренний числовой идентификатор (ID), который присваивается каждому объекту базы данных при его создании. Посредством этого идентификатора система может однозначно идентифицировать каждый объект базы данных.

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

Преобразовывает выражение w в указанный тип данных type (если это возможно). Аргумент w может быть любым действительным выражением.

-- Вернет 3 SELECT CAST (3.1258 AS INT)

Возвращает первое значение выражения из списка выражений a1, a2, . которое не является значением null.

Возвращает длину столбца col объекта базы данных (таблицы или представления) obj.

-- Вернет 4 SELECT COL_LENGTH ('Employee', 'Id')

Эквивалент функции CAST, но аргументы указываются по-иному. Может применяться с любым типом данных.

Возвращает текущие дату и время.

Возвращает имя текущего пользователя.

Возвращает число байтов, которые занимает выражение z.

-- Этот запрос возвращает длину каждого поля SELECT DATALENGTH(FirstName) FROM Employee

Возвращает 1, если использование значений null в базе данных dbname отвечает требованиям стандарта ANSI SQL.

Возвращает значение выражения expr, если оно не равно NULL; в противном случае возвращается значение value.

Определяет, имеет ли выражение expr действительный числовой тип.

Создает однозначный идентификационный номер ID, состоящий из 16-байтовой двоичной строки, предназначенной для хранения значений типа данных UNIQUEIDENTIFIER.

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

Возвращает значение null, если значения выражений expr1 и expr2 одинаковые.

-- Запрос возвращает NULL для проекта, -- у которого Number = 'p1' SELECT NULLIF(Number, 'p1') FROM Project

Возвращает информацию о свойствах сервера базы данных.

Возвращает ID текущего пользователя.

Возвращает идентификатор пользователя username. Если пользователь не указан, то возвращается идентификатор текущего пользователя.

Возвращает имя пользователя с указанным идентификатором id. Если идентификатор не указан, то возвращается имя текущего пользователя.

Функции метаданных

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

Возвращает имя столбца с указанным идентификатором col_id таблицы с идентификатором tab_id.

-- Вернет имя столбца 'LastName' SELECT COL_NAME (OBJECT_ID('Employee'), 3)

Возвращает информацию об указанном столбце.

-- Вернет значение свойства PRECISION -- для столбца Id таблицы Employee SELECT COLUMNPROPERTY (OBJECT_ID('Employee'), 'Id', 'precision')

Возвращает значение свойства property базы данных database.

-- Вернет значение свойства IsNullConcat -- для базы данных SampleDb SELECT DATABASEPROPERTY ('SampleDb', 'IsNullConcat')

Возвращает идентификатор базы данных db_name. Если имя базы данных не указано, то возвращается идентификатор текущей базы данных.

Возвращает имя базы данных, имеющей идентификатор db_id. Если идентификатор не указан, то возвращается имя текущей базы данных.

Возвращает имя индексированного столбца таблицы table. Столбец указывается идентификатором индекса i и позицией no столбца в этом индексе.

Возвращает свойства именованного индекса или статистики для указанного идентификационного номера таблицы, имя индекса или статистики, а также имя свойства.

Возвращает имя объекта базы данных, имеющего идентификатор obj_id.

SELECT OBJECT_NAME(245575913);

Возвращает идентификатор объекта obj_name базы данных.

-- Вернет 245575913 - ID таблицы Employee SELECT OBJECT_ID('Employee')

Возвращает информацию об объектах из текущей базы данных.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *