Mapping NULL Values to Other Values for Display
Problem
A query’s
output includes NULL values, but
you’d rather see something more meaningful, like
“Unknown.”
Solution
Convert NULL values selectively to another value
when displaying them. You can also use this technique to catch
divide-by-zero errors.
Discussion
Sometimes it’s useful to display
NULL values using some other distinctive value
that has more meaning in the context of your application. If
NULL id values in the
taxpayer table mean
“unknown,” you can display that
label by using IF( ) to map them onto the string
Unknown:
mysql> SELECT name, IF(id IS NULL,'Unknown', id) AS 'id' FROM taxpayer;
+---------+---------+
| name | id |
+---------+---------+
| bernina | 198-48 |
| bertha | Unknown |
| ben | Unknown |
| bill | 475-83 |
+---------+---------+Actually, this technique works for any kind of value, but
it’s especially useful with NULL
values because they tend to be given a variety of meanings: unknown,
missing, not yet determined, out of range, and so forth.
The query can be written more concisely using IFNULL( ), which tests its first argument and returns it if
it’s not NULL, or returns its
second argument otherwise:
mysql> SELECT name, IFNULL(id,'Unknown') AS 'id' FROM taxpayer;
+---------+---------+
| name | id |
+---------+---------+
| bernina | 198-48 |
| bertha | Unknown |
| ben | Unknown |
| bill | 475-83 |
+---------+---------+In other words, these two tests are equivalent:
IF(expr1IS NOT NULL,expr1,expr2) IFNULL( ...