CodeGym /コース /SQL SELF /文字列のフォーマット: CONCAT(), UPPER(), LOWER()

文字列のフォーマット: CONCAT(), UPPER(), LOWER()

SQL SELF
レベル 5 , レッスン 1
使用可能

テキストデータの操作は、データベースのタスクで毎日やることだよ。たとえば、君がネットショップの開発者で、ユーザーのデータベースを持ってるとしよう。サイトのウェルカムバナーにユーザーのフルネームを表示したい時、例えば「ようこそ、Otto Art!」みたいにね。あるいは、全てのメールアドレスを標準化したい(例えば全部小文字にするなど)。こういう時は文字列操作が必須だよ。

PostgreSQLはテキスト操作のための強力なツールを用意してる。今日はその中でも基本の3つをやるよ:

  • CONCAT() — 文字列の結合。
  • UPPER() — 文字列を全部大文字に変換。
  • LOWER() — 文字列を全部小文字に変換。

CONCAT()関数の使い方

CONCAT()関数は複数の文字列を1つにくっつけることができるよ。データが別々のカラムに入ってるけど、まとめて表示したい時に超便利。

シンタックス

CONCAT(string1, string2, ..., stringN)
  • string1, string2, stringN — 結合したい文字列やカラム。
  • 全部の引数をつなげた1つの文字列を返すよ。

例:名前を処理する

例えば、studentsテーブルがあるとしよう:

first_name last_name
Otto Art
Maria Chi
Anna Pal

やること:学生のフルネームを「名前 苗字」って形で表示する。

クエリ:

SELECT CONCAT(first_name, ' ', last_name) AS full_name
FROM students;

結果:

full_name
Otto Art
Maria Chi
Anna Pal

名前と苗字の間の' 'に注目! これはスペースで、文字列を区切るために追加してるよ。

使う時のポイント

CONCAT()NULLを無視する。もし引数のどれかがNULLなら、その部分はスキップされるよ。まだNULLが何か分からなくても大丈夫、あとで説明するから!

CONCAT()の代わりに||演算子も使える。例えば:

SELECT first_name || ' ' || last_name AS full_name FROM students;

文字列の大文字・小文字変換: UPPER()LOWER()

例えば、ユーザーがいろんな大文字・小文字でメールアドレスを入力してる場合:ivan@example.comIVAN@EXAMPLE.COMみたいな。標準化したい時は:

  • 比較の前に全部同じ形(例えばlowercase)にする。
  • 大事な単語を目立たせたい時(例えばタイトルをUPPERCASEに)。

UPPER(): 文字列を全部大文字に

UPPER()関数はテキストを全部大文字に変換するよ。

シンタックス:

UPPER(string)
  • string — 文字列やテキストカラム名。

例:

studentsテーブルにemailカラムが追加された:

first_name last_name email
Otto Art otto@example.com
Maria Chi MARIA@EXAMPLE.com
Anna Pal anna.pal@mail.ru

メールアドレスを全部大文字で表示したい:

SELECT email, UPPER(email) AS email_upper
FROM students;

結果:

email email_upper
otto@example.com OTTO@EXAMPLE.COM
MARIA@EXAMPLE.com MARIA@EXAMPLE.COM
anna.pal@gmail.com ANNA.PAL@GMAIL.COM

LOWER(): 文字列を全部小文字に

同じように、LOWER()関数はテキストを全部小文字に変換するよ。

シンタックス:

LOWER(string)

例:

メールアドレスを全部小文字にする:

SELECT email, LOWER(email) AS email_lower
FROM students;

結果:

email email_lower
otto@example.com otto@example.com
MARIA@EXAMPLE.com maria@example.com
anna.pal@gmail.com anna.pal@gmail.com

実践例とケーススタディ

ここまで学んだことを全部まとめてみよう。

フルネームを全部大文字で作る

クエリ:

SELECT CONCAT(UPPER(first_name), ' ', UPPER(last_name)) AS full_name_upper
FROM students;

結果:

full_name_upper
OTTO ART
MARIA CHI
ANNA PAL

ここではCONCAT()で名前と苗字を結合して、UPPER()で全部大文字にしてるよ。

例:メールアドレスの標準化

全てのメールアドレスを小文字に統一したい:

UPDATE students
SET email = LOWER(email);

これでテーブル内のメールアドレスは全部同じ形(小文字)になるよ。元の大文字・小文字は関係なくなる。

UPDATE演算子の使い方は次のレクチャーで説明するね。

ユーザーへのウェルカムメッセージを作る

フルネームに「ようこそ」を追加しよう:

SELECT CONCAT('ようこそ, ', first_name, ' ', last_name, '!') AS greeting
FROM students;

結果:

greeting
ようこそ, Otto Art!
ようこそ, Maria Chi!
ようこそ, Anna Pal!

テキスト関数を使う時のよくあるミス

CONCAT()でスペースを忘れると、結果が変になることがある。例えば:

SELECT CONCAT(first_name, last_name) AS full_name
FROM students;

結果は「OttoArt」「MariaChi」みたいになる。必要な場所には必ずスペースを入れよう。

NULLの扱い。CONCAT()の引数のどれかがNULLだと、文字列が不完全になることがある。例えば:

SELECT CONCAT(first_name, ' ', middle_name, ' ', last_name) AS full_name
FROM students;

middle_name = NULLの場合、結果は「Otto NULL Art」になる。これを避けるにはCOALESCE()関数を使おう:

SELECT CONCAT(first_name, ' ', COALESCE(middle_name, ''), ' ', last_name) AS full_name
FROM students;

NULLやCOALESCE()関数については、またすぐ次のレクチャーで詳しくやるよ :P

2
タスク
SQL SELF, レベル 5, レッスン 1
ロック未解除
大文字への変換
大文字への変換
2
タスク
SQL SELF, レベル 5, レッスン 1
ロック未解除
メールアドレスの標準化
メールアドレスの標準化
コメント
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION