CodeGym /コース /SQL SELF /文字列操作: LENGTH(), SUBSTRING(), TRIM(), POSITION(), REPLACE...

文字列操作: LENGTH(), SUBSTRING(), TRIM(), POSITION(), REPLACE(), INITCAP()

SQL SELF
レベル 6 , レッスン 0
使用可能

名前や住所、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;
email 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;
email 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

名前のフォーマットを統一したいときに便利!

コメント
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION