言語
日本語
English

Caution

お使いのブラウザはJavaScriptが無効になっております。
当サイトでは検索などの処理にJavaScriptを使用しています。
より快適にご利用頂くため、JavaScriptを有効にしたうえで当サイトを閲覧することをお勧めいたします。

  1. トップページ
  2. SQL辞典
  3. SUBSTRING / TRIM

SUBSTRING / TRIM

対応: SQL-92(1992)

文字列から指定した位置・長さの部分を取り出したり、前後の空白や特定文字を除去するための関数です。データのクレンジングや加工によく使われます。

構文

『SUBSTRING』: 指定した位置から指定した長さの文字列を取り出します。

SUBSTRING(文字列, 開始位置, 長さ)
SUBSTR(文字列, 開始位置, 長さ)   -- 短縮形

『LEFT』 / 『RIGHT』: 左端・右端からN文字を取り出します。

LEFT(文字列, N)
RIGHT(文字列, N)

『TRIM』: 前後の空白や指定文字を除去します。

TRIM(文字列)
TRIM(LEADING '文字' FROM 文字列)   -- 先頭のみ除去
TRIM(TRAILING '文字' FROM 文字列)  -- 末尾のみ除去
TRIM(BOTH '文字' FROM 文字列)      -- 両端から除去

『LTRIM』 / 『RTRIM』: 左端・右端の空白を除去します。

LTRIM(文字列)
RTRIM(文字列)

構文一覧

関数概要
SUBSTRING(s, pos, len)posは1始まりです。lenを省略すると末尾まで返します。
LEFT(s, n)文字列の左端からn文字を返します。
RIGHT(s, n)文字列の右端からn文字を返します。
TRIM(s)文字列の前後の空白を除去します。
LTRIM(s)文字列の左端(先頭)の空白を除去します。
RTRIM(s)文字列の右端(末尾)の空白を除去します。

サンプルコード

以下の『employees』テーブルを例に説明します。

employees email ayanami.rei@example.com ikari.shinji@example.com soryu.asuka@example.com 3 rows in set

メールアドレスから@より前のユーザー名を取り出します。

sample_substring_trim.sql
SELECT
    email,
    SUBSTRING(
        email,
        1,
        POSITION('@' IN email) - 1
    ) AS username
FROM employees;
+--------------------------+--------------+
| email                    | username     |
+--------------------------+--------------+
| ayanami.rei@example.com  | ayanami.rei  |
| ikari.shinji@example.com | ikari.shinji |
| soryu.asuka@example.com  | soryu.asuka  |
+--------------------------+--------------+
3 rows in set

メールアドレスの@より後のドメイン部分を取り出します。

sample_substring_trim.sql
SELECT
    email,
    RIGHT(
        email,
        CHAR_LENGTH(email) - POSITION('@' IN email)
    ) AS domain
FROM employees;
+--------------------------+-------------+
| email                    | domain      |
+--------------------------+-------------+
| ayanami.rei@example.com  | example.com |
| ikari.shinji@example.com | example.com |
| soryu.asuka@example.com  | example.com |
+--------------------------+-------------+
3 rows in set

入力データの前後空白を除去してクレンジングします。

sample_substring_trim.sql
UPDATE employees
SET email = TRIM(email)
WHERE TRIM(email) <> email;
Query OK, 2 rows affected
Rows matched: 2  Changed: 2  Warnings: 0
SELECT email FROM employees;
+--------------------------+
| email                    |
+--------------------------+
| ayanami.rei@example.com  |
| ikari.shinji@example.com |
| soryu.asuka@example.com  |
+--------------------------+
3 rows in set

メールアドレスのローカル部(@より前)の先頭3文字を取り出します。

sample_substring_trim.sql
SELECT
    email,
    LEFT(email, 3) AS local_prefix
FROM employees;
+--------------------------+--------------+
| email                    | local_prefix |
+--------------------------+--------------+
| ayanami.rei@example.com  | aya          |
| ikari.shinji@example.com | ika          |
| soryu.asuka@example.com  | sor          |
+--------------------------+--------------+
3 rows in set

データベース別の書き方

MySQL / MariaDB

『SUBSTRING』と『SUBSTR』の両方が使用できます。『LEFT』『RIGHT』『LTRIM』『RTRIM』も利用可能です。

SELECT SUBSTRING(email, 1, POSITION('@' IN email) - 1) AS username
FROM employees;
SELECT LEFT(email, 3) AS local_prefix FROM employees;

PostgreSQL

『SUBSTRING』と『LEFT』『RIGHT』が使用できます。『TRIM』『LTRIM』『RTRIM』も共通で利用可能です。

SELECT SUBSTRING(email FROM 1 FOR POSITION('@' IN email) - 1) AS username
FROM employees;
SELECT LEFT(email, 3) AS local_prefix FROM employees;

SQLite

SQLite では『SUBSTR』と『SUBSTRING』の両方に対応しています。『LEFT』『RIGHT』は使用できないため、『SUBSTR』で代用します。

SELECT SUBSTR(email, 1, INSTR(email, '@') - 1) AS username
FROM employees;
SELECT SUBSTR(email, 1, 3) AS local_prefix FROM employees;

概要

『SUBSTRING』の開始位置は1始まりです(配列の0始まりとは異なります)。開始位置に0を指定すると1と同じ扱いになるDBMSもありますが、明示的に1から指定する習慣をつけてください。

『TRIM』はデフォルトで前後の空白(スペース)を除去しますが、除去する文字を指定することもできます。全角スペースは TRIM の対象外です。全角スペースを除去するには REPLACE を使って明示的に空文字に置き換えてください。

文字列の結合・長さ取得は『CONCAT / LENGTH』を、文字列の置換・大文字小文字変換は『UPPER / LOWER / REPLACE』を参照してください。

記事の間違いや著作権の侵害等ございましたらお手数ですがまでご連絡頂ければ幸いです。