Megosztás a következőn keresztül:


Logikai függvények - LEGNAGYOBB (Transact-SQL)

Vonatkozik a következőkre: SQL Server 2022 (16.x) és későbbi verziók, Azure SQL Database,Azure SQL Managed Instance,Azure Synapse Analytics,SQL database in Microsoft Fabric

Ez a függvény egy vagy több kifejezésből álló listából származó maximális értéket adja vissza.

Transact-SQL szintaxis konvenciók

Szemantika

GREATEST ( expression1 [ , ...expressionN ] )

Arguments

expression1, expressionN

Bármely hasonló adattípus vesszővel elválasztott kifejezéseinek listája. A GREATEST függvény legalább egy argumentumot igényel, és legfeljebb 254 argumentumot támogat.

Minden kifejezés lehet állandó, változó, oszlopnév vagy függvény, valamint bármilyen aritmetikai, bitszerű és string operátorok kombinációja. Aggregált függvények és skaláris allekérdezések engedélyezettek.

Visszatérési típusok

Visszaadja a legmagasabb prioritású adattípust a függvényhez átadott típusok halmazából. További információ: Adattípus elsőbbsége (Transact-SQL).

Ha minden argumentum azonos adattípusú, és a típus támogatott az összehasonlításhoz, GREATEST akkor az adott típus adja vissza.

Ellenkező esetben a függvény implicit módon az összes argumentust a legmagasabb prioritású adattípusra konvertálja az összehasonlítás előtt, és ezt a típust használja visszaküldési típusként.

Numerikus típusok esetén a visszaadó típus skálája megegyezik a legmagasabb precedencia argumentummal, vagy a legnagyobb skála, ha több érv is a legmagasabb precedensű adattípusú.

Megjegyzések

Az argumentumok listáján minden kifejezésnek olyan adattípusúnak kell lennie, amely összehasonlítható, és implicit módon átalakítható az érv legmagasabb prioritású adattípusára.

Az összes érv implicit átalakítása a legmagasabb prioritású adattípusra történik az összehasonlítás előtt.

Ha az argumentumok közötti implicit típusátalakítás nem támogatott, a függvény meghibásodik és hibát ad.

További információért az implicit és explicit átalakításról lásd: Adattípus-átalakítás (Adatbázis Motor).

Ha egy vagy több érv nem NULLaz, akkor NULL az érvek az összehasonlítás során figyelmen kívül hagyják. Ha minden érv , NULLakkor GREATEST visszaadja NULL.

A karakterargumentumok összehasonlítása a Collation Precedence (Transact-SQL) szabályait követi.

A következő típusok nem támogatottak összehasonlításra: GREATESTvarchar(max), varbinary(max) vagy nvarchar(max) 8 000 bájtos feletti értékek, kurzor, geometria, földrajz, kép, nem bájt-sorolt felhasználó által definiált típusok, ntext, táblázat, szöveg és xml.

A varchar(max), varbinary(max) és nvarchar(max) adattípusok támogatottak olyan argumentumok esetén, amelyek 8 000 bájtos vagy annál rövidebbek, és az összehasonlítás előtt implicit módon varchar(n), varbinary(n) és nvarchar(n)-re konvertálódnak.

Például a varchar(max) akár 8 000 karaktert is támogathat, ha egybájtos kódolást használ, míg a nvarchar(max) akár 4 000 bájtpárt is támogathat (feltételezve az UTF-16 karakterkódolást).

Példák

A. Maximális értéket vissza az állandók listájából

A következő példa a megadott állandók listájából a maximális értéket adja vissza.

A visszaadó típus skálája a legmagasabb prioritású adattípus érvelésének skálája határozza meg.

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

Itt van az eredmények összessége.

GreatestVal
--------
  7.0000

(1 rows affected)

B. Maximális értéket visszaadjunk egy karakterállandó listából

A következő példa adja vissza a megadott karakterállandók listájából származó maximális értéket.

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

Itt van az eredmények összessége.

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

(1 rows affected)

C. A maximális értéket egy oszlopargumentumok listájából

Ez a példa a maximális értéket adja vissza egy oszlopargumentumok listájából, és az összehasonlítás során figyelmen kívül NULL hagyja az értékeket. Ez a minta az AdventureWorksLT adatbázist használja, amely gyorsan telepíthető egy új Azure SQL adatbázis mintaadatbázisaként. További információ: AdventureWorks-mintaadatbázisok.

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;

Itt van az eredmények összessége. LatestDate a három érték közül a legnagyobb dátumértéket választja, figyelmen NULLkívül hagyva .

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. Használat GREATEST lokális változókkal

Ez a példa a kluzuzus predikátumán WHERE belüli lokális változók listájának maximális értékének meghatározására GREATEST szolgál.

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

Itt van az eredmények összessége. Csak 0,7-nél nagyobb értékek jelennek meg.

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

(1 rows affected)

E. Használat GREATEST oszlopokkal, állandókkal és változókkal

Ez a példa egy vegyes lista maximális értékének meghatározására GREATEST szolgál, amely oszlopokat, állandókat és változókat tartalmaz.

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

Itt van az eredmények összessége.

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

(3 rows affected)

Következő lépések