Funciones lógicas - GREATEST (Transact-SQL)
Se aplica a: Sql Server 2022 (16.x) Azure SQL Database Azure SQL Instancia administrada punto de conexión de SQL Analytics de Azure Synapse Analytics en Microsoft Fabric Warehouse en Microsoft Fabric
Esta función devuelve el valor máximo de una lista de una o varias expresiones.
Convenciones de sintaxis de Transact-SQL
Sintaxis
GREATEST ( expression1 [ , ...expressionN ] )
Argumentos
expresión1, expresiónN
Lista de expresiones separadas por comas de cualquier tipo de datos comparable. La función GREATEST
requiere al menos un argumento y no admite más de 254.
Cada expresión puede ser una constante, una variable, un nombre de columna o función, o bien cualquier combinación de operadores aritméticos, bit a bit o de cadena. Se permiten las funciones de agregado y las subconsultas escalares.
Tipos de valores devueltos
Devuelve el tipo de datos con la mayor prioridad del conjunto de tipos pasados a la función. Para obtener más información, vea Prioridad de tipo de datos (Transact-SQL).
Si todos los argumentos tienen el mismo tipo de datos y este se admite para la comparación, GREATEST
devuelve ese tipo.
De lo contrario, la función convertirá implícitamente todos los argumentos al tipo de datos con la precedencia más alta antes de la comparación y lo usará como tipo de valor devuelto.
En el caso de los tipos numéricos, la escala del tipo de valor devuelto será la misma que el argumento con la precedencia más alta; en el caso de que esta se dé en varios argumentos, la escala será la más alta.
Observaciones
Todas las expresiones de la lista de argumentos deben ser de un tipo de datos que sea comparable y que se pueda convertir implícitamente al tipo de datos del argumento con la precedencia más alta.
La conversión implícita de todos los argumentos al tipo de datos con mayor precedencia se realizará antes de la comparación.
Si no se admite la conversión implícita de tipos entre los argumentos, se producirá un error en la función y se devolverá un error.
Para obtener más información sobre la conversión implícita y explícita, vea Conversiones de tipos de datos (Motor de base de datos).
Si uno o más argumentos no son NULL
, se omiten los argumentos NULL
durante la comparación. Si todos los argumentos son NULL
, GREATEST
devuelve NULL
.
La comparación de los argumentos de caracteres sigue las reglas de Prioridad de intercalación (Transact-SQL).
Los tipos siguientes no se admiten para la comparación en GREATEST
: varchar(max), varbinary(max) o nvarchar(max) con más de 8000 bytes, cursor, geometría, geografía, imagen, tipos no definidos por el usuario sin orden de bytes, ntext, tabla, text y xml.
Los tipos de datos varchar(max), varbinary(max), and nvarchar(max) se admiten para los argumentos de 8000 bytes o menos, y que convertirán implícitamente a varchar(n), varbinary(n) y nvarchar(n), respectivamente, antes de la comparación.
Por ejemplo, varchar(max) admite hasta 8000 caracteres si se usa un juego de caracteres de codificación de un solo byte y nvarchar(max) admite hasta 4000 pares de bytes (suponiendo que la codificación de caracteres es UTF-16).
Ejemplos
A. Devolución del valor máximo de una lista de constantes
En el ejemplo siguiente, se devuelve el valor máximo de la lista de constantes que se proporciona.
La escala del tipo de valor devuelto viene determinada por la escala del argumento con el tipo de datos de mayor precedencia.
SELECT GREATEST('6.62', 3.1415, N'7') AS GreatestVal;
GO
Este es el conjunto de resultados.
GreatestVal
--------
7.0000
(1 rows affected)
B. Devolución del valor máximo de una lista de constantes de caracteres
En el ejemplo siguiente, se devuelve el valor máximo de la lista de constantes de caracteres que se proporciona.
SELECT GREATEST('Glacier', N'Joshua Tree', 'Mount Rainier') AS GreatestString;
GO
Este es el conjunto de resultados.
GreatestString
-------------
Mount Rainier
(1 rows affected)
C. Devolución del valor máximo de una lista de argumentos de columna
En este ejemplo, se devuelve el valor máximo de una lista de argumentos de columna y se omiten los valores NULL
durante la comparación. En este ejemplo se usa la base de datos AdventureWorksLT
, que se puede instalar rápidamente como base de datos de ejemplo para una nueva instancia de Azure SQL Database. Para más información, vea Bases de datos de ejemplo 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;
Este es el conjunto de resultados. LatestDate
elige el mayor valor de fecha de los tres valores, omitiendo 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. Uso de GREATEST
con variables locales
En este ejemplo, se usa GREATEST
para determinar el valor máximo de una lista de variables locales en el predicado de una cláusula 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
Este es el conjunto de resultados. Solo se muestran los valores mayores que 0,7.
VarX Correlation
---------- -----------
Var2 .825
(1 rows affected)
E. Uso de GREATEST
con columnas, constantes y variables
En este ejemplo, se usa GREATEST
para determinar el valor máximo de una lista mixta que incluye columnas, constantes y variables.
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
Este es el conjunto de resultados.
VarX Correlation GreatestVar
---------- --------------------- ---------------------
Var1 0.200 0.590
Var2 0.825 0.825
Var3 0.610 0.610
(3 rows affected)