Oracle SQL 関数 : SUBSTR : 文字列切出し

 stringRet := SUBSTR( stringSrc , numberPos [ , numberLen ] );

 SUBSTRは文字列stringSrcのnumberPos番目からnumberLen文字分の文字列を返します。
  (stringSrcの文字列の数え方は先頭が1として処理します。)
  numberPosが0(ゼロ)の場合は1として処理します。
 numberPosが正の数の場合はstringSrcの先頭から数え,numberPosが負の数の場合はstringSrcの
  最後から数えます。
 numberLenを指定しない場合は、stringSrcのnumberPos番目から最後までの文字列を返します。

SQL> SELECT SUBSTR('ABCDEFGHIJKLMNOPQRSTUVWXYZ', 10, 5),
  2         SUBSTR('ABCDEFGHIJKLMNOPQRSTUVWXYZ', 10),
  3         SUBSTR('ABCDEFGHIJKLMNOPQRSTUVWXYZ', 0, 5),
  4         SUBSTR('ABCDEFGHIJKLMNOPQRSTUVWXYZ',-5, 4)
  5  FROM DUAL;

SUBST SUBSTR('ABCDEFGHI SUBST SUBS
----- ----------------- ----- ----
JKLMN JKLMNOPQRSTUVWXYZ ABCDE VWXY


指定文字列に 全角文字 が指定された場合は、全角文字も1文字は1個として扱う様です。

SQL> SELECT SUBSTR('あいうえおかきくけこさしすせそ', 10, 5),
  2         SUBSTR('あいうえおかきくけこさしすせそ', 10),
  3         SUBSTR('あいうえおかきくけこさしすせそ', 0, 5),
  4         SUBSTR('あいうえおかきくけこさしすせそ',-5, 4)
  5  FROM DUAL;

SUBSTR('あいうえおか SUBSTR('あいうえおかきく SUBSTR('あいうえおか SUBSTR('あいうえ
-------------------- ------------------------ -------------------- ----------------
こさしすせ           こさしすせそ             あいうえお           さしすせ


さらに指定文字列に 半角、全角文字 が混在していても、うまくいく様です。

SQL> SELECT SUBSTR('あいうabえおかき12くけ345こさしすせそ', 10, 5),
  2         SUBSTR('あいうabえおかき12くけ345こさしすせそ', 10),
  3         SUBSTR('あいうabえおかき12くけ345こさしすせそ', 0, 5),
  4         SUBSTR('あいうabえおかき12くけ345こさしすせそ',-8, 4)
  5  FROM DUAL;

SUBSTR('あいう SUBSTR('あいうABえおかき12くけ345こさしす  SUBSTR('あいうAB SUBSTR('あい
-------------- ------------------------------------------ ---------------- ------------
12くけ3        12くけ345こさしすせそ                      あいうab         45こさ