邏輯函數 - GREATEST (Transact-SQL)
適用於: sql Server 2022 (16.x) Azure SQL 資料庫 Azure SQL 受控執行個體 Microsoft Fabric Microsoft Fabric 倉儲中的 Azure Synapse Analytics SQL 分析端點
此函數會從一或多個運算式清單中傳回最大值。
語法
GREATEST ( expression1 [ , ...expressionN ] )
引數
expression1, expressionN
任何可比較資料類型的逗號分隔運算式清單。 GREATEST
函式需要至少一個引數,而且支援不超過 254 個引數。
每個運算式可以是一個常數、變數、資料行名稱或函式,或算術、位元和字串運算子的任何組合。 允許彙總函式和純量子查詢。
傳回類型
從通過功能的類型集中,傳回優先順序最高的資料類型。 如需詳細資訊,請參閱資料類型優先順序 (Transact-SQL)。
如果所有引數都有相同的資料類型,而且支援比較類型,則 GREATEST
會傳回該類型。
否則,函式會在比較之前隱含地將所有引數轉換成最高優先順序的資料類型,並使用這個類型作為傳回型別。
針對數值型別,傳回型別的級別會與最高優先順序引數相同,如果多個引數是最高優先順序資料類型,則為最大級別。
備註
引數清單中的所有運算式都必須是可比較的資料類型,而且可以隱含轉換成具有最高優先順序之引數的資料類型。
比較之前,會先將所有引數隱含轉換成最高優先順序的資料類型。
如果不支援引數之間的隱含型別轉換,函式將會失敗並傳回錯誤。
如需有關隱含及明確轉換的詳細資訊,請參閱資料類型轉換 (資料庫引擎)。
如果一或多個引數不是 NULL
,則 NULL
會在比較期間忽略引數。 如果所有引數均為 NULL
,則 GREATEST
會傳回 NULL
。
字元引數的比較遵循定序優先順序 (Transact-SQL) 的規則。
在 GREATEST
中不支援下列型別的比較: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 GREATEST('6.62', 3.1415, N'7') AS GreatestVal;
GO
結果集如下所示。
GreatestVal
--------
7.0000
(1 rows affected)
B. 從字元常數清單中傳回最大值
下列範例會從提供的字元常數清單中傳回最大值。
SELECT GREATEST('Glacier', N'Joshua Tree', 'Mount Rainier') AS GreatestString;
GO
結果集如下所示。
GreatestString
-------------
Mount Rainier
(1 rows affected)
C. 從資料行引數清單中傳回最大值
此範例會從資料行引數清單中傳回最大值,並在比較期間忽略 NULL
值。 此範例使用 AdventureWorksLT
資料庫,該資料庫可快速安裝為新 Azure SQL Database 的範例資料庫。 如需詳細資訊,請參閱 AdventureWorks 範例資料庫。
SELECT P.Name,
P.SellStartDate,
P.DiscontinuedDate,
PM.ModifiedDate AS ModelModifiedDate,
GREATEST(P.SellStartDate, P.DiscontinuedDate, PM.ModifiedDate) AS LatestDate
FROM SalesLT.Product AS P
INNER JOIN SalesLT.ProductModel AS PM
ON P.ProductModelID = PM.ProductModelID
WHERE GREATEST(P.SellStartDate, P.DiscontinuedDate, PM.ModifiedDate) >= '2007-01-01'
AND P.SellStartDate >= '2007-01-01'
AND P.Name LIKE 'Touring %'
ORDER BY P.Name;
結果集如下所示。 LatestDate
會選擇這三個值的最大日期值,忽略 NULL
。
Name SellStartDate DiscontinuedDate ModelModifiedDate LatestDate
-------------------- ----------------------- ------------------- ----------------------- -----------------------
Touring Pedal 2007-07-01 00:00:00.000 NULL 2009-05-16 16:34:29.027 2009-05-16 16:34:29.027
Touring Tire 2007-07-01 00:00:00.000 NULL 2007-06-01 00:00:00.000 2007-07-01 00:00:00.000
Touring Tire Tube 2007-07-01 00:00:00.000 NULL 2007-06-01 00:00:00.000 2007-07-01 00:00:00.000
(3 rows affected)
D. 搭配區域變數使用 GREATEST
此範例使用 GREATEST
來判斷 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 > GREATEST(@PredictionA, @PredictionB);
GO
結果集如下所示。 只會顯示大於 0.7 的值。
VarX Correlation
---------- -----------
Var2 .825
(1 rows affected)
E. 搭配資料行、常數和變數使用 GREATEST
此範例使用 GREATEST
來判斷包含資料行、常數和變數之混合清單的最大值。
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,
GREATEST(Correlation, 0, @VarX) AS GreatestVar
FROM dbo.Studies;
GO
結果集如下所示。
VarX Correlation GreatestVar
---------- --------------------- ---------------------
Var1 0.200 0.590
Var2 0.825 0.825
Var3 0.610 0.610
(3 rows affected)