名前や住所、emailとか、他のテキストを扱うときって、だいたい次のどっちかをやることになるよね:
- 文字列の一部を取り出す
- 長さを知る
- 余計なスペースを消す
- 一部を探す/置き換える
- 出力をフォーマットする
例えば、こんなことが必要なとき:
- フルネームから苗字だけ出したい。
- 苗字が「П」で始まる学生を探したい。
- 全部のスペースをアンダースコアに変えたい。
- 苗字の最初の文字を大文字にしたい。
こういうのは全部、PostgreSQLの文字列関数でサクッとできるよ。
LENGTH() — 文字列の長さ
LENGTH()関数は、文字列の文字数を返すよ。
構文:
LENGTH(string)
例:
SELECT name, LENGTH(name) AS name_length
FROM students;
| name | name_length |
|---|---|
| Art | 3 |
| Song | 4 |
| Pal | 3 |
名前やパスワードとか、テキストの長さチェックに便利!
SUBSTRING() — 文字列の一部を取り出す
文字列から部分文字列を取り出せる。例えば苗字の最初の3文字とか、emailのドメイン部分とか。
構文:
SUBSTRING(string FROM start FOR length)
start— 最初の文字の位置(1から始まる)length— 取り出す文字数
例1: 苗字の最初の3文字
SELECT last_name, SUBSTRING(last_name FROM 1 FOR 3) AS prefix
FROM students;
| last_name | prefix |
|---|---|
| Song | Son |
| Pal | Pal |
例2: emailのドメイン部分
SELECT email, SUBSTRING(email FROM POSITION('@' IN email) + 1) AS domain
FROM students;
| domain | |
|---|---|
| otto@example.com | example.com |
| maria@gmail.com | gmail.com |
TRIM() — 余計なスペースを消す
文字列の先頭や末尾のスペース(他の文字もOK)を消す。
構文:
TRIM([LEADING | TRAILING | BOTH] chars FROM string)
でも、だいたいはシンプルにこう使う:
TRIM(string)
例:
SELECT '[' || TRIM(' Art ') || ']' AS cleaned;
| cleaned |
|---|
| [Art] |
特に、ユーザーが手入力する時(先頭にスペース入れちゃうとか)に大事!
POSITION() — 部分文字列の検索
部分文字列が始まる位置を返す。
構文:
POSITION(substring IN string)
例:
SELECT email, POSITION('@' IN email) AS at_position
FROM students;
| at_position | |
|---|---|
| otto@example.com | 5 |
| anna.pal@gmail.com | 9 |
SUBSTRING()と組み合わせて部分文字列を取り出すのにも使える!
REPLACE() — 部分文字列の置き換え
指定した部分文字列を全部、他の文字列に置き換える。
構文:
REPLACE(string, from_substring, to_substring)
例: スペースをアンダースコアに変える
SELECT name, REPLACE(name, ' ', '_') AS fixed_name
FROM students;
| name | fixed_name |
|---|---|
| Otto Art | Otto_Art |
| Maria Chi | Maria_Chi |
INITCAP() — 最初の文字を大文字に
文字列を各単語の最初の文字だけ大文字、他は小文字にしてくれる。
構文:
INITCAP(string)
例:
SELECT INITCAP('anna pal') AS full_name;
| full_name |
|---|
| Anna Pal |
名前のフォーマットを統一したいときに便利!
GO TO FULL VERSION