質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Q&A

3回答

2119閲覧

SQL NULLの条件分岐について

parapa

総合スコア17

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

0グッド

1クリップ

投稿2018/11/21 07:40

前提・実現したいこと

SQLでnullを条件分岐してカラムをつくりたいのですがうまくいきません。
when null then 'hoge' は誤った文法なのでしょうか。

該当のソースコード

SQL

1SELECT (CASE gender when 0 then '男' when 1 then '女' when null then '不明' end) label

試したこと

nullだけの場合isを使いはうまくいきました。

SQL

1SELECT (CASE when gender is null then '不明' end)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

nullを使わなければいいだけなんですけどね
未回答=0,男=1,女=2,回答しない=99、的なすべての場合を想定して書きます

ちなみにnullがある場合はcase whenを

SQL

1SELECT gender,(CASE when gender=0 then '男' when gender=1 then '女' when gender is null then '不明' end) label 2from tbl

とします

もしくは、nullを別の数値に置き換えるとか

SQL

1SELECT gender,(CASE coalesce(gender,99) when 0 then '男' when 1 then '女' when 99 then '不明' end) label 2from tbl

投稿2018/11/21 07:49

編集2018/11/21 07:53
yambejp

総合スコア114572

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

nullを明示する方法と明示しないケースを紹介します。

・nullを明示的に例外処理するケース

SELECT ( CASE WHEN gender = 0 THEN '男' WHEN gender = 1 THEN '女' WHEN gender IS NULL THEN '不明' END) AS label

・nullを明示しないでELSEで処理するケース

SELECT ( CASE WHEN gender = 0 THEN '男' WHEN gender = 1 THEN '女' ELSE '不明' END) AS label

状況に応じて適切に対応しますが、バグのもとになりやすい部分なので慎重に実装してください。

投稿2019/04/12 03:56

編集2019/04/12 03:58
omixin

総合スコア58

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

CASE 式1 WHEN 式2の形式で使う場合、式1式2の比較は=で行われますので、NULL一致しません

投稿2018/11/21 07:47

maisumakun

総合スコア145121

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

maisumakun

2018/11/21 07:48

SQLでは、NULL = NULLはUNKNOWNということになって、TRUEではありません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問