Salta el contingut

Consultes senzilles - Funcions de Tractament de NULLs

https://mariadb.com/kb/en/control-flow-functions/

Hi ha algunes funcions que permeten tractar amb valors NULs i retornar aquest o altres valors en lloc seu:

  • IFNULL, NVL, NVL2, NULLIF, COALESCE

I una funció per a simular un switch:

  • CASE, DECODE_ORACLE

CASE

CASE És una expressió condicional equivalent a un switch/case o bé a una estructura IF-THENELSE

La sintaxis és:

CASE expr 
     WHEN comparison_expr1 THEN return_expr1
     WHEN comparison_expr2 THEN return_expr2
     * * *
     WHEN comparison_exprn THEN return_exprn
    [ELSE else_expr]
END

Exemple CASE

Exemple CASE
SELECT LAST_NAME, DEPARTMENT_ID,
       CASE DEPARTMENT_ID
            WHEN 10 THEN 'Deu'
            WHEN 20 THEN 'Vint'
            WHEN 30 THEN 'Trenta'
            ELSE 'Altre'
       END AS Dept
FROM EMPLOYEES;
+-----------+---------------+-------+
| LAST_NAME | DEPARTMENT_ID | Dept  |
+-----------+---------------+-------+
| King      |            90 | Altre |
| Kochhar   |            90 | Altre |
| De Haan   |            90 | Altre |
| Hunold    |            60 | Altre |
| Ernst     |            60 | Altre |
| Lorentz   |            60 | Altre |
| Mourgos   |            50 | Altre |
| Rajs      |            50 | Altre |
| Davies    |            50 | Altre |
| Matos     |            50 | Altre |
| Vargas    |            50 | Altre |
| Zlotkey   |            80 | Altre |
| Abel      |            80 | Altre |
| Taylor    |            80 | Altre |
| Grant     |          NULL | Altre |
| Whalen    |            10 | Deu   |
| Hartstein |            20 | Vint  |
| Fay       |            20 | Vint  |
| Higgins   |           110 | Altre |
| Gietz     |           110 | Altre |
+-----------+---------------+-------+

DECODE_ORACLE

DECODE_ORACLE és una expressió idèntica a CASE però amb una sintaxis diferent.

La sintaxis és:

DECODE( COLUMNA | expr,
        comparison_expr1, return_expr1,
        comparison_expr2, return_expr2,
        * * *
        comparison_exprn, return_exprn,
        else_expr)

Exemple DECODE_ORACLE

Exemple DECODE_ORACLE
SELECT LAST_NAME, DEPARTMENT_ID,
       DECODE_ORACLE(DEPARTMENT_ID,
       10, 'Deu',
       20, 'Vint',
       30, 'Trenta',
       'Altre') AS Dept
FROM EMPLOYEES;
+-----------+---------------+-------+
| LAST_NAME | DEPARTMENT_ID | Dept  |
+-----------+---------------+-------+
| King      |            90 | Altre |
| Kochhar   |            90 | Altre |
| De Haan   |            90 | Altre |
| Hunold    |            60 | Altre |
| Ernst     |            60 | Altre |
| Lorentz   |            60 | Altre |
| Mourgos   |            50 | Altre |
| Rajs      |            50 | Altre |
| Davies    |            50 | Altre |
| Matos     |            50 | Altre |
| Vargas    |            50 | Altre |
| Zlotkey   |            80 | Altre |
| Abel      |            80 | Altre |
| Taylor    |            80 | Altre |
| Grant     |          NULL | Altre |
| Whalen    |            10 | Deu   |
| Hartstein |            20 | Vint  |
| Fay       |            20 | Vint  |
| Higgins   |           110 | Altre |
| Gietz     |           110 | Altre |
+-----------+---------------+-------+