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 NULL
sono , NULL
gli argomenti vengono ignorati durante il confronto. Se tutti gli argomenti sono NULL
, restituisce NULL
GREATEST
.
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)