2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【MySQL】取得したデータが空文字またはNULLだった場合に代わりの文字列に変換したい

Last updated at Posted at 2021-10-12

やりたいこと

SELECT文でデータを取得した際に、そのデータが空文字、もしくはNULLだった場合に代わりの文字列を出したい。

NULLのデータの変換は簡単

NULLの場合はifnull関数を使えば簡単に変換できる。

-- nameがNULLだった場合に'名無しさん'に変換
select ifnull(name, '名無しさん') from users;

このようにifnull関数を使うと、取得したデータがNULLだった場合に第2引数に変換される。

【参考記事】

しかし、今回は空文字とNULLを両方変換したいので、ifnullを使って実現するのは難しい。

case式を使って条件分岐

case式で空文字とNULLの場合に別の文字列に変換する。

-- nameがNULL、もしくは空文字だった場合は'名無しさん'に変換
-- それ以外の場合はそのままnameを取得
select 
	case 
		when name is null or name = '' then '名無しさん' 
        else name 
	end as name 
from users;
1行で書く
select case when name is null or name = '' then '名無しさん' else name end as name from users;

これで本題の目的どおりに取得できる。

【参考記事】

case式を使う場合、次の点に気を付ける。(というか僕がひっかかった点)

  • name = nullでは変換できないため、name is nullとする。
  • endのあとにasでカラム名を設定する。(設定しないと「case when name is null or name = '' then '名無しさん' else name end」がカラム名になる)

まとめ

case式はすごく便利。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?