El paso a paso o código que hallarás en este post es la solución más fácil y válida que encontramos a tus dudas o dilema.
- 9.18.1.
CASE
- 9.18.2.
COALESCE
- 9.18.3.
NULLIF
- 9.18.4.
GREATEST
yLEAST
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
, yLEAST
son sintácticamente similares a las funciones, no son funciones ordinarias y, por lo tanto, no se pueden usar conVARIADIC
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 WHEN
condition
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 constante1/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 unCASE
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 |