Caution

お使いのブラウザはJavaScriptが実行できない状態になっております。
当サイトはWebプログラミングの情報サイトの為、
JavaScriptが実行できない環境では正しいコンテンツが提供出来ません。
JavaScriptが実行可能な状態でご閲覧頂くようお願い申し上げます。

SUBSTRING / TRIM

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

構文
-- 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)文字列の右端(末尾)の空白を除去します。
サンプルコード
-- メールアドレスから@より前のユーザー名を取り出します。
SELECT
    メールアドレス,
    SUBSTRING(
        メールアドレス,
        1,
        POSITION('@' IN メールアドレス) - 1
    ) AS ユーザー名
FROM 社員;

-- 郵便番号の最初の3桁(地域コード)を取り出します。
SELECT
    顧客名,
    郵便番号,
    LEFT(郵便番号, 3) AS 地域コード
FROM 顧客;

-- 入力データの前後空白を除去してクレンジングします。
UPDATE 顧客
SET 顧客名 = TRIM(顧客名),
    メールアドレス = TRIM(メールアドレス)
WHERE TRIM(顧客名) <> 顧客名
   OR TRIM(メールアドレス) <> メールアドレス;

-- 商品コードの先頭2文字がカテゴリを示す場合に分類します。
SELECT
    商品コード,
    商品名,
    LEFT(商品コード, 2) AS カテゴリコード,
    RIGHT(商品コード, 4) AS 連番
FROM 商品;
実行結果
-- メールアドレスのユーザー名抽出。
メールアドレス          | ユーザー名
------------------------+-----------
yamada@example.com      | yamada
suzuki.h@example.com    | suzuki.h
sato123@example.com     | sato123

-- 商品コードの分解。
商品コード | 商品名           | カテゴリコード | 連番
-----------+------------------+----------------+------
EL0042     | Bluetoothスピーカー | EL           | 0042
KT0018     | 電気ケトル       | KT             | 0018
データベース別の書き方

『SUBSTRING』は MySQL・PostgreSQL・SQL Server で共通して使用できます。Oracle では『SUBSTR』を使います。SQLite は『SUBSTR』と『SUBSTRING』の両方に対応しています。

-- Oracle・SQLite: SUBSTR を使います。
SELECT SUBSTR(メールアドレス, 1, INSTR(メールアドレス, '@') - 1) AS ユーザー名
FROM 社員;

『LEFT』『RIGHT』は MySQL・SQL Server で使用できます。PostgreSQL も対応しています。Oracle・SQLite では『SUBSTR』で代用します。

-- Oracle: SUBSTR で LEFT(郵便番号, 3) を代用します。
SELECT 顧客名, SUBSTR(郵便番号, 1, 3) AS 地域コード FROM 顧客;

-- Oracle: SUBSTR で RIGHT(商品コード, 4) を代用します。
SELECT 商品コード, SUBSTR(商品コード, -4) AS 連番 FROM 商品;

『TRIM』は全データベースで共通して使用できます。『LTRIM』『RTRIM』も MySQL・PostgreSQL・Oracle・SQL Server・SQLite で共通です。

概要

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

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

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

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