Partilhar via


Funções lógicas – GREATEST (Transact-SQL)

Aplica-se a: SQL Server 2022 (16.x) Banco de Dados SQL do Azure Instância Gerenciada de SQL do Azure Azure Synapse Analytics Ponto de extremidade de análise de SQL no Microsoft Fabric Warehouse no Microsoft Fabric

Essa função retorna o valor máximo de uma lista de uma ou mais expressões.

Convenções de sintaxe de Transact-SQL

Sintaxe

GREATEST ( expression1 [ , ...expressionN ] )

Argumentos

expression1, expressionN

Uma lista de expressões separadas por vírgulas de qualquer tipo de dados comparável. A função GREATEST requer pelo menos um argumento e não oferece suporte a mais de 254 argumentos.

Cada expressão pode ser uma constante, variável, nome de coluna ou função, e qualquer combinação de operadores aritméticos, bit a bit e de cadeia de caracteres. Funções de agregação e subconsultas escalares são permitidas.

Tipos de retorno

Retorna o tipo de dados com a precedência mais alta do conjunto de tipos transmitido à função. Para obter mais informações, confira Precedência de tipo de dados (Transact-SQL).

Se todos os argumentos tiverem o mesmo tipo de dados e o tipo tiver suporte para comparação, GREATEST retornará esse tipo.

Caso contrário, a função converterá implicitamente todos os argumentos para o tipo de dados da precedência mais alta antes da comparação e o usará como o tipo de retorno.

Para tipos numéricos, a escala do tipo de retorno será igual ao argumento de precedência mais alta ou a maior escala se mais de um argumento for do tipo de dados de precedência mais alta.

Comentários

Todas as expressões na lista de argumentos devem ser de um tipo de dados comparável e poder ser convertidas implicitamente no tipo de dados do argumento com a precedência mais alta.

A conversão implícita de todos os argumentos para o tipo de dados de precedência mais alta ocorre antes da comparação.

Se a conversão implícita de tipo entre os argumentos não tiver suporte, a função falhará e retornará um erro.

Para obter mais informações sobre conversões implícitas e explícitas, confira Conversão de tipo de dados (Mecanismo de Banco de Dados).

Se um ou mais argumentos não forem NULL, os argumentos NULL serão ignorados durante a comparação. Se todos os argumentos forem NULL, GREATEST retornará NULL.

A comparação de argumentos de caractere segue as regras de Precedência de ordenação (Transact-SQL).

Os seguintes tipos não são suportados para a comparação em GREATEST: varchar(max), varbinary(max) ou nvarchar(max) excedendo 8.000 bytes, cursor, geometria, geografia, imagem, tipos definidos pelo usuário não ordenados por byte, ntext, table, text e xml.

Os tipos de dados varchar(max), varbinary(max) e nvarchar(max) são suportados para argumentos de 8.000 ou menos e serão convertidos implicitamente para varchar(n), varbinary(n) e nvarchar(n), respectivamente, antes da comparação.

Por exemplo, varchar(max) pode ter suporte até 8.000 caracteres se estiver usando um conjunto de caracteres de codificação de byte único, e nvarchar(max) pode ter suporte até 4.000 pares de bytes (assumindo a codificação de caracteres UTF-16).

Exemplos

a. Retornar o valor máximo de uma lista de constantes

O exemplo a seguir retorna o valor máximo da lista de constantes fornecida.

A escala do tipo de retorno é determinada pela escala do argumento com o tipo de dados de precedência mais alta.

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

Veja a seguir o conjunto de resultados.

GreatestVal
--------
  7.0000

(1 rows affected)

B. Retornar o valor máximo de uma lista de constantes de caracteres

O exemplo a seguir retorna o valor máximo da lista de constantes de caracteres fornecida.

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

Veja a seguir o conjunto de resultados.

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

(1 rows affected)

C. Retornar o valor máximo de uma lista de argumentos da coluna

Este exemplo retorna o valor máximo de uma lista de argumentos de coluna e ignora os valores NULL durante a comparação. Este exemplo usa o banco de dados AdventureWorksLT, que pode ser instalado rapidamente como banco de dados de exemplo para um novo Banco de Dados SQL do Azure. Para obter mais informações, consulte os Bancos de dados de exemplo do 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;

Veja a seguir o conjunto de resultados. LatestDate escolhe o maior valor de data dos três valores, 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. Usar GREATEST com variáveis locais

Este exemplo usa GREATEST para determinar o valor máximo de uma lista de variáveis locais dentro do predicado de uma 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

Veja a seguir o conjunto de resultados. Somente valores maiores que 0,7 são exibidos.

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

(1 rows affected)

E. Usar GREATEST com colunas, constantes e variáveis

Este exemplo usa GREATEST para determinar o valor máximo de uma lista mista que inclui colunas, constantes e variáveis.

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

Veja a seguir o conjunto de resultados.

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

(3 rows affected)

Próximas etapas