邏輯函式 - LEAST (Transact-SQL)
適用於: sql Server 2022 (16.x) Azure SQL 資料庫 Azure SQL 受控執行個體 Microsoft Fabric Microsoft網狀架構倉儲中的 Azure Synapse Analytics SQL 分析端點
此函式會從一或多個運算式清單中傳回最小值。
語法
LEAST ( expression1 [ , ...expressionN ] )
引數
expression1, expressionN
任何可比較資料類型的逗號分隔運算式清單。 LEAST
函式需要至少一個引數,而且支援不超過 254 個引數。
每個運算式可以是一個常數、變數、資料行名稱或函式,或算術、位元和字串運算子的任何組合。 允許彙總函式和純量子查詢。
傳回類型
從通過功能的類型集中,傳回優先順序最高的資料類型。 如需詳細資訊,請參閱資料類型優先順序 (Transact-SQL)。
如果所有引數都有相同的資料類型,而且支援比較類型,則 LEAST
會傳回該類型。
否則,函式會在比較之前隱含地將所有引數轉換成最高優先順序的資料類型,並使用這個類型作為傳回型別。
針對數值型別,傳回型別的級別會與最高優先順序引數相同,如果多個引數是最高優先順序資料類型,則為最大級別。
備註
引數清單中的所有運算式都必須是可比較的資料類型,而且可以隱含轉換成具有最高優先順序之引數的資料類型。
比較之前,會先將所有引數隱含轉換成最高優先順序的資料類型。
如果不支援引數之間的隱含型別轉換,函式將會失敗並傳回錯誤。
如需有關隱含及明確轉換的詳細資訊,請參閱資料類型轉換 (資料庫引擎)。
如果一或多個引數不是 NULL
,則 NULL
會在比較期間忽略引數。 如果所有引數均為 NULL
,則 LEAST
會傳回 NULL
。
字元引數的比較遵循定序優先順序 (Transact-SQL) 的規則。
在 LEAST
中不支援下列型別的比較:varchar(max)、varbinary(max) 或 nvarchar(max) 超過 8,000 位元組、cursor、geometry、geography、image、非位元組排序使用者定義型別、ntext、table、text 和 xml。
varchar(max)、varbinary(max) 和 nvarchar(max) 資料類型針對 8,000 位元組或以下的引數受到支援,並且會在比較之前分別隱含地轉換為 varchar(n)、varbinary(n) 和 nvarchar(n)。
例如,如果使用單一位元組編碼字元集,則 varchar(max) 可以支援多達 8,000 個字元,nvarchar(max) 可以支援多達 4,000 個位元組配對 (假設是 UTF-16 字元編碼)。
範例
A. 從常數清單傳回最小值
下列範例會從已提供的常數清單傳回最小值。
傳回型別的級別取決於具有最高優先順序資料類型的引數級別。
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
資料庫,該資料庫可快速安裝為新 Azure SQL Database 的範例資料庫。 如需詳細資訊,請參閱 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)
E. 搭配資料行、常數和變數使用 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)