Condividi tramite


Funzioni logiche - GREATEST (Transact-SQL)

Si applica a: SQL Server 2022 (16.x) database SQL di Azure Istanza gestita di SQL di Azure endpoint di analisi SQL di Azure Synapse Analytics in Microsoft Fabric Warehouse in Microsoft Fabric

Questa funzione restituisce il valore massimo da un elenco di una o più espressioni.

Convenzioni relative alla sintassi Transact-SQL

Sintassi

GREATEST ( expression1 [ , ...expressionN ] )

Argomenti

expression1, expressionN

Elenco di espressioni delimitate da virgole di qualsiasi tipo di dati paragonabile. La funzione GREATEST richiede almeno un argomento ma ne supporta massimo 254.

Ogni espressione può essere una costante, un nome di colonna, una variabile o una funzione e qualsiasi combinazione di operatori aritmetici, bit per bit e stringa. È possibile utilizzare funzioni di aggregazione e sottoquery scalari.

Tipi restituiti

Restituisce il tipo di dati con precedenza maggiore nel set di tipi passato alla funzione. Per altre informazioni, vedere Precedenza dei tipi di dati (Transact-SQL).

Se tutti gli argomenti hanno lo stesso tipo di dati e il tipo è supportato per il confronto, GREATEST restituisce tale tipo.

In caso contrario, la funzione convertirà in modo implicito tutti gli argomenti nel tipo di dati con la precedenza più alta prima del confronto e userà questo tipo come tipo restituito.

Per i tipi numerici, la scala del tipo restituito sarà uguale all'argomento di precedenza più alta o alla scala più grande se più di un argomento è del tipo di dati di precedenza più alta.

Osservazioni:

Tutte le espressioni nell'elenco di argomenti devono essere di un tipo di dati paragonabile e che può essere convertito in modo implicito nel tipo di dati dell'argomento con la precedenza più elevata.

La conversione implicita di tutti gli argomenti al tipo di dati con precedenza più alta avviene prima del confronto.

Se la conversione implicita dei tipi tra gli argomenti non è supportata, la funzione avrà esito negativo e restituirà un errore.

Per altre informazioni sulla conversione implicita ed esplicita dei dati, vedere Conversione di tipi di dati (motore di database).

Se uno o più argomenti non NULLsono , NULL gli argomenti vengono ignorati durante il confronto. Se tutti gli argomenti sono NULL, restituisce NULLGREATEST .

Il confronto tra gli argomenti di carattere segue le regole di precedenza delle regole di confronto (Transact-SQL).

I tipi seguenti non sono supportati per il confronto in GREATEST: varchar(max), varbinary(max) o nvarchar(max) superiore a 8.000 byte, cursor, geometry, geography, image, non byte-ordered user-defined types, ntext, table, text e xml.

I tipi di dati varchar(max), varbinary(max)e nvarchar(max) sono supportati per gli argomenti che sono di 8.000 byte o meno e verranno convertiti in modo implicito in varchar(n), varbinary(n)e nvarchar(n), rispettivamente, prima del confronto.

Ad esempio, varchar(max) può supportare fino a 8.000 caratteri se si usa un set di caratteri di codifica a byte singolo e nvarchar(max) può supportare fino a 4.000 coppie di byte (presupponendo la codifica dei caratteri UTF-16).

Esempi

R. Restituisce il valore massimo da un elenco di costanti

Nell'esempio seguente viene restituito il valore massimo dall'elenco di costanti fornite.

La scala del tipo restituito è determinata dalla scala dell'argomento con il tipo di dati di precedenza più alta.

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

Il set di risultati è il seguente.

GreatestVal
--------
  7.0000

(1 rows affected)

B. Restituisce il valore massimo da un elenco di costanti di caratteri

Nell'esempio seguente viene restituito il valore massimo dall'elenco di costanti di carattere fornite.

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

Il set di risultati è il seguente.

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

(1 rows affected)

C. Restituisce il valore massimo da un elenco di argomenti di colonna

In questo esempio viene restituito il valore massimo da un elenco di argomenti di colonna e i valori vengono ignorati NULL durante il confronto. Questo esempio usa il database AdventureWorksLT, installabile rapidamente come database di esempio per un nuovo database SQL di Azure. Per ulteriori informazioni, vedere Database di esempio 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;

Il set di risultati è il seguente. LatestDate sceglie il valore di data più grande tra i tre, ignorando 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. Usare GREATEST con le variabili locali

In questo esempio viene usato GREATEST per determinare il valore massimo di un elenco di variabili locali all'interno del predicato di una clausola 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

Il set di risultati è il seguente. Vengono visualizzati solo i valori superiori a 0,7.

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

(1 rows affected)

E. Usare GREATEST con colonne, costanti e variabili

In questo esempio viene usato GREATEST per determinare il valore massimo di un elenco misto che include colonne, costanti e variabili.

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

Il set di risultati è il seguente.

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

(3 rows affected)

Passaggi successivi