¡¡Hola, chicos!!
En este post me gustaría traer algo nuevo que ya está disponible en Azure SQL Database y creo que pronto estará disponible también en SQL Server On-premise, que son las “nuevas” (Para los que ya trabajan con otros bancos, esta función es muy conocida y está disponible desde hace muchos años) las funciones MAYOR y MENOR, que tienen como objetivo devolver el valor mayor o menor entre una lista de diferentes valores o columnas.

Aún no he visto documentación sobre esto, ni ningún contenido en portugués y decidí compartir esta noticia y también mostrar cómo funcionará.

Me enteré de estas nuevas funciones cuando vi un tweet de la leyenda Itzik Ben-Gan al respecto:

Incluso pensé que era alguna broma o broma, fui a probarlo en un SQL Server 2019 CU8 (el más reciente hasta la fecha) y, como esperaba, apareció un mensaje de error indicando que esta función no existe:

Pero cuando probé en Azure SQL Database, que siempre tiene la versión más actual de SQL Server posible, esta función estaba ahí:

Así que demostraré rápidamente algunas formas de usar estas dos funciones en SQL Server.

Si está utilizando una versión de SQL Server que no admite las funciones MAYOR y MENOR, puede lograr el mismo comportamiento utilizando algunas técnicas que expliqué en el artículo. Cómo recuperar el valor más grande entre varias columnas en una tabla de SQL Server.

Ejemplo:

SELECT 
    MAX(Valores.Valor) AS [GREATEST],
    MIN(Valores.Valor) AS [LEAST]
FROM 
    (VALUES (4), (85), (120), (154), (52), (87), (999), (15), (12)) AS Valores(Valor)

Y esto también se puede aplicar a varias columnas de una tabla:

SELECT 
    ID,
    Data1, Data2, Data3,
    (
        SELECT MAX(UltimoAcesso)
        FROM (VALUES (Data1),(Data2),(Data3)) AS UltimoAcesso(UltimoAcesso)
    ) AS MaiorData
FROM 
    ##Teste

Ya utilizando las nuevas funciones, el comportamiento es muy sencillo:

SELECT 
    ID,
    Data1, Data2, Data3,
    GREATEST(Data1, Data2, Data3) AS MaiorData,
    LEAST(Data1, Data2, Data3) AS MenorData
FROM 
    ##Teste

Recordando que esta función funciona con fechas, números e incluso cadenas.

Ejemplo con números:

SELECT
    *,
    GREATEST(Valor1, Valor2, Valor3, Valor4, Valor5, Valor6) AS GREATEST,
    LEAST(Valor1, Valor2, Valor3, Valor4, Valor5, Valor6) AS LEAST
FROM 
    ##Teste

Ejemplo con palabras:

SELECT
    *,
    GREATEST(Nome1, Nome2, Nome3, Nome4) AS GREATEST,
    LEAST(Nome1, Nome2, Nome3, Nome4) AS LEAST
FROM 
    #Teste

Algunas observaciones sobre estas funciones.
  • Si el tipo de datos de los valores o columnas difiere, todas las expresiones se convierten al tipo de la primera expresión o columna a comparar.
  • Al comparar cadenas y textos, la comparación se realizará utilizando el código ASCII, es decir, el algoritmo comparará el primer carácter de cada expresión e identificará cuál tiene el código ASCII más grande... En caso de empate, se evaluará el segundo carácter y así sucesivamente hasta que ya se hayan evaluado todas las expresiones para decidir cuál es el mayor o el menor.

Bueno, ¡eso es todo amigos!
Espero que hayas disfrutado del artículo y ¡hasta luego!