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 |
+-----------+---------------+-------+