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こさ