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

Область применения: SQL Server 2022 (16.x) База данных SQL Azure Управляемый экземпляр SQL Azure конечную точку аналитики SQL Azure Synapse Analytics в хранилище Microsoft Fabric в Microsoft Fabric

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

Соглашения о синтаксисе Transact-SQL

Синтаксис

LEAST ( expression1 [ , ...expressionN ] )

Аргументы

expression1, expressionN

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

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

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

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

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

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

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

Замечания

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

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

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

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

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

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

Для сравнения не поддерживаются следующие типы: 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)