Логические функции — 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
, возвращается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)
В. Возвращает минимальное значение из списка аргументов столбцов
Этот пример возвращает минимальное значение из списка аргументов столбца и при сравнении игнорирует значения 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)