テキストデータの操作は、データベースのタスクで毎日やることだよ。たとえば、君がネットショップの開発者で、ユーザーのデータベースを持ってるとしよう。サイトのウェルカムバナーにユーザーのフルネームを表示したい時、例えば「ようこそ、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.com、IVAN@EXAMPLE.COMみたいな。標準化したい時は:
- 比較の前に全部同じ形(例えば
lowercase)にする。 - 大事な単語を目立たせたい時(例えばタイトルを
UPPERCASEに)。
UPPER(): 文字列を全部大文字に
UPPER()関数はテキストを全部大文字に変換するよ。
シンタックス:
UPPER(string)
string— 文字列やテキストカラム名。
例:
studentsテーブルにemailカラムが追加された:
| first_name | last_name | |
|---|---|---|
| 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_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_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
GO TO FULL VERSION