コマンド道場

$ man substring

SUBSTRING

文字列関数

文字列の一部を切り出す。開始位置は 1 から数える。

呼び出しの形

SUBSTRING(文字列 FROM 開始位置 FOR 長さ)
SUBSTRING(文字列, 開始位置, 長さ)
LEFT(文字列, 長さ)
RIGHT(文字列, 長さ)

つまずきやすいところ

  • 開始位置は 1 からです。0 から数える言語に慣れていると 1 文字ずれます。

  • 長さを省略すると末尾までです。文字列より長い長さを指定してもエラーにはなりません。

  • LEFT / RIGHT は標準 SQL ではありません。Oracle には無く、SUBSTR を使う必要があります。

実行例

結果は実際に流したものです。同じ SQL を 自由に打てる画面 で試すと、同じ結果になります。

3 つの書き方で同じ結果になる
SELECT shohin_name, SUBSTRING(shohin_name FROM 1 FOR 2) AS hyoujun, SUBSTRING(shohin_name, 1, 2) AS kanryaku, LEFT(shohin_name, 2) AS hidari FROM shohin ORDER BY shohin_id
shohin_namehyoujunkanryakuhidari
ノートノーノーノー
ボールペンボーボーボー
付箋付箋付箋付箋
デスクチェアデスデスデス
書棚書棚書棚書棚
デスクライトデスデスデス
キーボードキーキーキー

7

長さを省略すると末尾まで取る
SELECT category, LEFT(category, 1) AS atama, RIGHT(category, 1) AS oshiri, SUBSTRING(category FROM 2) AS ni_moji_me_kara FROM shohin ORDER BY shohin_id
categoryatamaoshirini_moji_me_kara
文具
文具
文具
家具
家具
家電
家電

7

説明

SUBSTRING は文字列の一部を切り出します。開始位置は 1 から数えます(0 からではありません)。

書き方が 2 通りあります。FROM ... FOR ... を使うのが標準 SQL の形で、カンマ区切りは多くの製品が受け付ける短い形です。

先頭や末尾から取るだけなら LEFT / RIGHT のほうが読みやすくなります。コードの上 2 桁で分類する、といった用途によく使います。

⚠️ 長さを省略すると末尾まで取ります。また、文字列より長い長さを指定してもエラーにはならず、あるところまでが返ります。

次に読む

根拠にした一次情報