Logiska funktioner - STÖRSTA (Transact-SQL)

Gäller för: SQL Server 2022 (16.x) och senare versioner Azure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsSQL database in Microsoft Fabric

Denna funktion returnerar det maximala värdet från en lista med ett eller flera uttryck.

Transact-SQL syntaxkonventioner

Syntax

GREATEST ( expression1 [ , ...expressionN ] )

Arguments

uttryck1, uttryckN

En lista över kommaseparerade uttryck av någon jämförbar datatyp. Funktionen GREATEST kräver minst ett argument och stöder högst 254 argument.

Varje uttryck kan vara en konstant, variabel, kolumnnamn eller funktion, samt en kombination av aritmetik-, bit- och strängoperatorer. Aggregerade funktioner och skalära delfrågor är tillåtna.

Returtyper

Returnerar datatypen med högst prioritet från mängden av typer som skickats till funktionen. Mer information finns i Data Type Precedence (Transact-SQL).

Om alla argument har samma datatyp och typen stöds för jämförelse, GREATEST returnerar den typen.

Annars kommer funktionen implicit att konvertera alla argument till datatypen med högst prioritet före jämförelse och använda denna typ som returtyp.

För numeriska typer kommer skalan för returtypen att vara densamma som för argumentet med högst prioritet, eller den största skalan om mer än ett argument har datatypen med högst prioritet.

Anmärkningar

Alla uttryck i argumentlistan måste vara av en datatyp som är jämförbar och som implicit kan konverteras till datatypen för argumentet med högst prioritet.

Implicit konvertering av alla argument till datatypen med högst prioritet sker före jämförelse.

Om implicit typkonvertering mellan argumenten inte stöds, kommer funktionen att misslyckas och ge ett fel.

För mer information om implicit och explicit konvertering, se Data Type Conversion (Database Engine).

Om ett eller flera argument inte NULLär det, ignoreras NULL argument under jämförelsen. Om alla argument är NULL, så GREATEST returnerar NULL.

Jämförelse av karaktärsargument följer reglerna för Collation Precedence (Transact-SQL).

Följande typer stöds inte för jämförelse iGREATEST: varchar(max), varbinary(max) eller nvarchar(max) som överstiger 8 000 byte, markör, geometri, geografi, bild, icke-byteordnade användardefinierade typer, ntext, tabell, text och xml.

Datatyperna varchar(max), varbinary(max) och nvarchar(max) stöds för argument som är 8 000 byte eller mindre, och kommer implicit att konverteras till varchar(n),varbinary(n) respektive nvarchar(n) innan jämförelse.

Till exempel kan varchar(max) stödja upp till 8 000 tecken om man använder en enbyte-kodningsteckenuppsättning, och nvarchar(max) kan stödja upp till 4 000 bytepar (förutsatt UTF-16-teckenkodning).

Examples

A. Returnera maximalt värde från en lista av konstanter

Följande exempel återger det maximala värdet från listan över konstanter som tillhandahålls.

Skalan för returtypen bestäms av skalan för argumentet med högst prioritet på datatypen.

SELECT GREATEST('6.62', 3.1415, N'7') AS GreatestVal;
GO

Här är resultatet.

GreatestVal
--------
  7.0000

(1 rows affected)

B. Returnera maximalt värde från en lista med teckenkonstanter

Följande exempel returnerar det maximala värdet från listan över teckenkonstanter som tillhandahålls.

SELECT GREATEST('Glacier', N'Joshua Tree', 'Mount Rainier') AS GreatestString;
GO

Här är resultatet.

GreatestString
-------------
Mount Rainier

(1 rows affected)

C. Returnera maximalt värde från en lista med kolumnargument

Detta exempel returnerar det maximala värdet från en lista med kolumnargument och ignorerar NULL värden under jämförelsen. Detta exempel använder databasen AdventureWorksLT , som snabbt kan installeras som exempeldatabas för en ny Azure SQL-databas. Mer information finns i AdventureWorks-exempeldatabaser.

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;

Här är resultatet. LatestDate väljer det högsta datumvärdet av de tre värdena och ignorerar 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. Användning GREATEST med lokala variabler

Detta exempel används GREATEST för att bestämma det maximala värdet av en lista av lokala variabler inom predikatet av en WHERE klausul.

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

Här är resultatet. Endast värden större än 0,7 visas.

VarX       Correlation
---------- -----------
Var2              .825

(1 rows affected)

E. Användning GREATEST med kolumner, konstanter och variabler

Detta exempel används GREATEST för att bestämma det maximala värdet på en blandad lista som inkluderar kolumner, konstanter och variabler.

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

Här är resultatet.

VarX       Correlation           GreatestVar
---------- --------------------- ---------------------
Var1       0.200                 0.590
Var2       0.825                 0.825
Var3       0.610                 0.610

(3 rows affected)

Nästa steg