Freigeben über


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 GREATESTNULL zurück.

Der Vergleich von Zeichenargumenten folgt den Regeln der Sortierungsrangfolge (Transact-SQL).

Die folgenden Typen werden für Vergleiche in GREATESTnicht 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)

Nächste Schritte