はい、今回はMySQL。単純な変換だったり条件による分岐だったり様々な変換があるので、
よく使うやつから変なのまで個人的に利用頻度高い順に纏めてみた。
もしもXXXの場合
IFNULL
1 2 |
# 例文 IFNULL(カラムA, '') AS 別名 |
→もしもカラムAがNULLの場合空文字を返す。
基本的にNULLを許容しないのがベストですが、外部結合等するとNULLは発生してしまうのでそんな時に活躍。
CASE WHEN
1 2 |
# 例文 CASE WHEN カラムA = 条件A THEN 答えA WHEN カラムA = 条件B THEN 答えB ELSE 答えC END AS 別名 |
→もしもカラムAの値が条件Aならば答えAを出力し、条件Bならば答えBを、どっちでもない場合は答えCを返す。
何個でも追加可能だけれども可読性とトレードオフ。
くっつける系
CONCAT
1 2 |
# 例文 CONCAT('もじ', 'もじもじ') AS 別名 |
→もじもじもじを出力する。
カラムだろうが任意の文字列だろうが全てをくっつけてくれる。
ただ、カラムをくっつける際NULLがあるとNULLになってしまうので注意。
何個でも追加可能だけれどもやはり可読性とトレードオフ。
GROUP_CONCAT
1 2 |
# 例文 GROUP_CONCAT(DISTINCT カラムA SEPARATOR ',') AS 別名 |
→そのカラムのレコードを区切りって1レコードとして出力する。
初めにDISTINCTを付ける事で重複する値は削除され一意の値のみとなる。
SEPARATOR ‘,’ で,(カンマ)で区切るよーって事。なんでも行ける。省略時はカンマ区切り。
JOINさせたGROUP_CONCATに対して、SUBSTRING_INDEXとFIND_IN_SETとかすると楽しい。
更にそれをCASE WHEN とかするとすんごい複雑な分岐も出来ますけれどもやはり可読性と(ry
文字列変換
TRIM
1 2 |
# 例文 TRIM(' XXX ') AS 別名 |
→XXXを出力する。
SQL単体だとほぼ使う時ない(登録時に綺麗にするから)けど、
VBA等できったないきったないエクセルを取込したりとかする時にはほぼ必須級。
(セルの結合とかほんとやめてください)
REPLACE
1 2 |
# 例文 REPLACE(カラムA, 'X', 'Y') AS 別名 |
→カラムAの値にXが含まれていればYに置換して出力する。
個人的にはCASE WHENと絡めて値をチェックして置換するイメージ。
本当はこのREPLACEよりもUPDATE/INSERTの意味のREPLACEの方が利用頻度高いですけども、
それはまた別記事で纏めたいと思います。
LEFT/RIGHT
1 2 3 4 |
# 例文1 LEFT('はまみ',2) AS 別名 # 例文2 RIGHT('はまみ',2) AS 別名 |
例文1→はま を出力する。
例文2→まみ を出力する。
読んで字のごとくLEFTは左から指定の文字数分切り出し、RIGHTは右から切り出す。
対象より大きい数を指定した場合は文字列がすべて返されます。
テーブル結合させる為にこれで切り出す時が多いですね。
SUBSTRING/MID
1 2 3 4 |
# 例文1 SUBSTRING('XYZ123456', 3) AS 別名 # 例文2 SUBSTRING('XYZ123456', 3, 3) AS 別名 |
例文1→Z123456を出力する。
例文2→Z123 を出力する。
指定した開始位置から文字数を切り出します。切り出す文字数を省略した場合は全てを出力する。
間違えやすいのが0からカウントでは無く1から数えます。例文ではSUBSTRINGしか載せてませんが、
MIDも全く同じ指定方法で同じ結果を返します。
型変換
CAST/ CONVERT
1 2 |
# 例文 CAST(カラムA AS SIGNED) AS 別名 |
→カラムAの値を整数値型に変換し出力する。
変換の王道のCAST。
SELECTしたデータをごにょごにょする時に型がちゃんとしてないと上手く行かないのでちゃんとCASTしましょう。
文字列型の数値に+したりする暗黙の型変換は嫌われるので やっちゃダメ!
CONVERT(カラムA AS SIGNED)で書いても全く同じ出力結果になります。
以下変換できる型一覧
あまり使わない変換たち(個人的に
DATE_FORMAT
1 2 |
# 例文 DATE_FORMAT('20001225', '%Y%m%d' ) AS 別名 |
→2012/12/25で出力します。
欲しい形式の日付型(DATETIMEとか)のカラムとかに対して使う感じ。
LOWER
1 2 |
# 例文 lower('JJJ') AS 別名 |
→小文字のjjjで出力する。
…いつ使うねん
UPPER
1 2 |
# 例文 upper('jjj') AS 別名 |
→大文字のJJJで出力する。
…いつ使うねん②
まとめ
いかがでしたでしょうか?いくら綺麗に入れたって正攻法じゃ行かない時もあると思うので、
そんな時はLET’S変換!そんな時にお役に立てれば幸いです(ᵔᴥᵔ)
コメント