9.18.1. CASE
9.18.2. COALESCE
9.18.3. NULLIF
9.18.4. GREATEST y LEAST

Esta sección describe las expresiones condicionales compatibles con SQL disponibles en PostgreSQL.

Propina

Si sus necesidades van más allá de las capacidades de estas expresiones condicionales, es posible que desee considerar escribir una función del lado del servidor en un lenguaje de programación más expresivo.

Nota

A pesar de que COALESCE, GREATEST, y LEAST son sintácticamente similares a las funciones, no son funciones ordinarias y, por lo tanto, no se pueden usar con VARIADIC array argumentos.

9.18.1. CASE

El SQL CASE expression es una expresión condicional genérica, similar a las declaraciones if / else en otros lenguajes de programación:

CASEWHEN condition THEN result
     [WHEN...][ELSE result]END

CASE las cláusulas se pueden utilizar siempre que una expresión sea válida. Cada condition es una expresión que devuelve un boolean resultado. Si el resultado de la condición es true, el valor de la CASE expresión es la result que sigue a la condición, y el resto de la CASE la expresión no se procesa. Si el resultado de la condición no es true, cualquier posterior WHEN las cláusulas se examinan de la misma manera. Si no WHENcondition rendimientos true, el valor de la CASE expresión es la result de El ELSE cláusula. Si el ELSE se omite la cláusula y no se establece ninguna condición true, el resultado es null.

Un ejemplo:

SELECT * FROM test;

 a
---
 1
 2
 3


SELECT a,
       CASE WHEN a=1 THEN 'one'
            WHEN a=2 THEN 'two'
            ELSE 'other'
       END
    FROM test;

 a | case
---+-------
 1 | one
 2 | two
 3 | other

Los tipos de datos de todos los result las expresiones deben ser convertibles a un solo tipo de salida. Consulte la Sección 10.5 para obtener más detalles.

Hay un sencillo forma de CASE expresión que es una variante de la forma general anterior:

CASE expression
    WHENvalueTHEN result
    [WHEN...][ELSE result]END

El primero expression se calcula, luego se compara con cada uno de los value expresiones en el WHEN cláusulas hasta que se encuentre una que sea igual a ella. Si no se encuentra ninguna coincidencia, result de El ELSE cláusula (o una null value) se devuelve. Esto es similar al switch declaración en C.

El ejemplo anterior se puede escribir usando el sencillo CASE sintaxis:

SELECT a,
       CASE a WHEN 1 THEN 'one'
              WHEN 2 THEN 'two'
              ELSE 'other'
       END
    FROM test;

 a | case
---+-------
 1 | one
 2 | two
 3 | other

A CASE expresión no evalúa las subexpresiones que no son necesarias para determinar el resultado. Por ejemplo, esta es una forma posible de evitar una falla de división por cero:

SELECT...WHERECASEWHEN x <>0THEN y/x >1.5ELSEfalseEND;

Nota

Como se describe en la Sección 4.2.14, existen varias situaciones en las que las subexpresiones de una expresión se evalúan en diferentes momentos, de modo que el principio de que CASE evalúa solo subexpresiones necesarias no es acorazado. Por ejemplo una constante 1/0 La subexpresión generalmente dará como resultado una falla de división por cero en el momento de la planificación, incluso si está dentro de un CASE brazo que nunca se ingresaría en tiempo de ejecución.

9.18.2. COALESCE

COALESCE(value[,...])

los COALESCE La función devuelve el primero de sus argumentos que no es null. Se devuelve nulo solo si todos los argumentos son null. A menudo se utiliza para sustituir un valor predeterminado para null valores cuando se recuperan datos para su visualización, por ejemplo:

SELECTCOALESCE(description, short_description,'(none)')...

Esto vuelve description si no es null, de lo contrario short_description si no es null, de lo contrario (none).

Todos los argumentos deben ser convertibles a un tipo de datos común, que será el tipo del resultado (consulte la Sección 10.5 para obtener más detalles).

Como un CASE expresión, COALESCE solo evalúa los argumentos necesarios para determinar el resultado; es decir, argumentos a la derecha de la primera nonull los argumentos no se evalúan. Esta función estándar de SQL proporciona capacidades similares a NVL y IFNULL, que se utilizan en algunos otros sistemas de bases de datos.

9.18.3. NULLIF

NULLIF(value1, value2)

los NULLIF la función devuelve un null valor si value1 es igual a value2; de lo contrario regresa value1. Esto se puede utilizar para realizar la operación inversa del COALESCE ejemplo dado arriba:

SELECTNULLIF(value,'(none)')...

En este ejemplo, si value es (none), null se devuelve, de lo contrario el valor de value es regresado.

Los dos argumentos deben ser de tipos comparables. Para ser específicos, se comparan exactamente como si hubiera escrito value1 = value2, por lo que debe haber un adecuado = operador disponible.

El resultado tiene el mismo tipo que el primer argumento, pero hay una sutileza. Lo que realmente se devuelve es el primer argumento de la implícita = operador y, en algunos casos, se habrá promovido para que coincida con el tipo del segundo argumento. Por ejemplo, NULLIF(1, 2.2) rendimientos numeric, porque no hay integer=numeric operador, solo numeric=numeric.

9.18.4. GREATEST y LEAST

GREATEST(value[,...])
LEAST(value[,...])

los GREATEST y LEAST Las funciones seleccionan el valor más grande o más pequeño de una lista de cualquier número de expresiones. Todas las expresiones deben ser convertibles a un tipo de datos común, que será el tipo del resultado (consulte la Sección 10.5 para obtener más detalles). Los valores NULL de la lista se ignoran. El resultado será NULL solo si todas las expresiones se evalúan como NULL.

Tenga en cuenta que GREATEST y LEAST no están en el estándar SQL, pero son una extensión común. Algunas otras bases de datos hacen que devuelvan NULL si algún argumento es NULL, en lugar de solo cuando todos son NULL.

Anterior Hasta próximo
9.17. Funciones de manipulación de secuencias Hogar 9.19. Funciones y operadores de matriz