Logikfunktionen: GREATEST (Transact-SQL)
Gilt für: SQL Server 2022 (16.x) Azure SQL-Datenbank Azure SQL verwaltete Instanz Azure Synapse Analytics SQL Analytics-Endpunkt in Microsoft Fabric Warehouse in Microsoft Fabric Fabric
Diese Funktion gibt den maximalen Wert aus einer Liste mit einem oder mehreren Ausdrücken zurück.
Transact-SQL-Syntaxkonventionen
Syntax
GREATEST ( expression1 [ , ...expressionN ] )
Argumente
expression1, expressionN
Eine Liste von durch Komma getrennten Ausdrücken eines beliebigen vergleichbaren Datentyps. Die GREATEST
-Funktion erfordert mindestens ein Argument und unterstützt nicht mehr als 254 Argumente.
Jeder Ausdruck kann eine Konstante, eine Variable, ein Spaltenname oder eine Funktion sowie eine beliebige Kombination aus arithmetischen, bitweisen und Zeichenfolgenoperatoren sein. Aggregatfunktionen und skalare Unterabfragen sind zulässig.
Rückgabetypen
Gibt den Datentyp mit der höchsten Rangfolge aus dem Satz von Typen zurück, der an die Funktion übergeben wurde. Weitere Informationen finden Sie unter Rangfolge der Datentypen (Transact-SQL).
Wenn alle Argumente denselben Datentyp aufweisen und der Typ für den Vergleich unterstützt wird, gibt GREATEST
diesen Typ zurück.
Andernfalls konvertiert die Funktion vor dem Vergleich alle Argumente implizit in den Datentyp der höchsten Rangfolge und verwendet diesen Typ als Rückgabetyp.
Bei numerischen Typen ist die Skalierung des Rückgabetyps identisch mit dem Argument mit der höchsten Rangfolge oder der größten Skalierung, wenn mehr als ein Argument den Datentyp mit der höchsten Rangfolge hat.
Bemerkungen
Alle Ausdrücke in der Liste der Argumente müssen von einem Datentyp sein, der vergleichbar ist und implizit in den Datentyp des Arguments mit der höchsten Rangfolge konvertiert werden kann.
Die implizite Konvertierung aller Argumente in den Datentyp mit der höchsten Rangfolge erfolgt vor dem Vergleich.
Wenn eine implizite Typkonvertierung zwischen den Argumenten nicht unterstützt wird, tritt bei der Funktion ein Fehler auf, und es wird eine Fehlermeldung zurückgegeben.
Weitere Informationen zur impliziten und expliziten Konvertierung finden Sie unter Datentypkonvertierung (Datenbank-Engine).
Wenn mindestens ein Argument nicht NULL
ist, werden die NULL
-Argumente beim Vergleich ignoriert. Wenn alle Argumente NULL
sind, gibt GREATEST
NULL
zurück.
Der Vergleich von Zeichenargumenten folgt den Regeln der Sortierungsrangfolge (Transact-SQL).
Die folgenden Typen werden für Vergleiche in GREATEST
nicht unterstützt: varchar(max), varbinary(max) oder nvarchar(max), wenn 8.000 Byte überschritten werden, Cursor, geometry, geography, image, nicht byte-sortierte benutzerdefinierte Typen, ntext, Tabelle, text und xml.
Die Datentypen varchar(max), varbinary(max) und nvarchar(max) werden für Argumente mit einer Größe von max. 8.000 Byte unterstützt und werden vor dem Vergleich implizit in varchar(n), varbinary(n) bzw. nvarchar(n) konvertiert.
So kann varchar(max) beispielsweise bis zu 8.000 Zeichen unterstützen, wenn ein Einzelbyte-Codierungszeichensatz verwendet wird, und nvarchar(max) bis zu 4.000 Byte-Paare (bei Verwendung der UTF-16-Zeichencodierung).
Beispiele
A. Zurückgeben des Höchstwerts aus einer Liste von Konstanten
Im folgenden Beispiel wird der maximale Wert aus der bereitgestellten Liste der Konstanten zurückgegeben.
Die Skalierung des Rückgabetyps wird durch die Skalierung des Arguments mit dem Datentyp mit der höchsten Rangfolge bestimmt.
SELECT GREATEST('6.62', 3.1415, N'7') AS GreatestVal;
GO
Hier sehen Sie das Ergebnis.
GreatestVal
--------
7.0000
(1 rows affected)
B. Zurückgeben des Höchstwerts aus einer Liste von Zeichenkonstanten
Im folgenden Beispiel wird der maximale Wert aus der bereitgestellten Liste der Zeichenkonstanten zurückgegeben.
SELECT GREATEST('Glacier', N'Joshua Tree', 'Mount Rainier') AS GreatestString;
GO
Hier sehen Sie das Ergebnis.
GreatestString
-------------
Mount Rainier
(1 rows affected)
C. Zurückgeben des Höchstwerts aus einer Liste von Spaltenargumenten
Dieses Beispiel gibt den maximalen Wert aus einer Liste von Spaltenargumenten zurück und ignoriert NULL
Werte während des Vergleichs. Diese Beispiel verwendet die Datenbank AdventureWorksLT
, die schnell als Beispieldatenbank für eine neue Azure SQL-Datenbank installiert werden kann. Weitere Informationen finden Sie in den AdventureWorks-Beispieldatenbanken.
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;
Hier sehen Sie das Ergebnis. LatestDate
wählt den größten Datumswert der drei Werte aus, wobei NULL
ignoriert wird.
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: Verwenden von GREATEST
mit lokalen Variablen
In diesem Beispiel wird GREATEST
verwendet, um den maximalen Wert in einer Liste lokaler Variablen innerhalb des Prädikats einer WHERE
-Klausel zu ermitteln.
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
Hier sehen Sie das Ergebnis. Nur Werte über 0.7 werden angezeigt.
VarX Correlation
---------- -----------
Var2 .825
(1 rows affected)
E. Verwenden von GREATEST
mit Spalten, Konstanten und Variablen
Dieses Beispiel verwendet GREATEST
, um den maximalen Wert in einer Liste zu ermitteln, die Spalten, Konstanten und Variablen beinhaltet.
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
Hier sehen Sie das Ergebnis.
VarX Correlation GreatestVar
---------- --------------------- ---------------------
Var1 0.200 0.590
Var2 0.825 0.825
Var3 0.610 0.610
(3 rows affected)