ここでは文字列を操作するSQL関数について紹介します。
目次
文字列を編集する
文字列の左右の空白を削除する(TRIM関数)
SELECT '[' || TRIM(' ABCDE ') || ']' FROM DUAL
--結果:[ABCDE]
文字列の左の空白を削除する(LTRIM関数)
SELECT '[' || LTRIM(' ABCDE ') || ']' FROM DUAL
--結果:[ABCDE ]
文字列の右の空白を削除する(RTRIM関数)
SELECT '[' || RTRIM(' ABCDE ') || ']' FROM DUAL
--結果:[ ABCDE]
指定した文字列を別の文字列に置き換える(REPLACE関数)
構文
REPLACE(文字列, 検索文字列, 置換文字列)
SELECT REPLACE('2020-01-31', '-', '/') FROM DUAL
--結果:2020/01/31
文字列の左側を特定の文字で埋める(LPAD関数)
構文
LPAD(文字列, 指定桁数, 埋め込み文字)
SELECT LPAD('ABC', 5, '*') FROM DUAL
--結果:**ABC
文字列の右側を指定した文字で埋める(RPAD関数)
構文
RPAD(文字列, 指定桁数, 埋め込み文字)
SELECT RPAD('ABC', 5, '*') FROM DUAL
--結果:ABC**
文字列を全角に変換する(TO_MULTI_BYTE関数)
SELECT TO_MULTI_BYTE('123-ABC') FROM DUAL
--結果:123-ABC
文字列を半角に変換する(TO_SINGLE_BYTE関数)
SELECT TO_SINGLE_BYTE('123-ABC') FROM DUAL
--結果:123-ABC
半角英小文字を大文字に変換する(UPPER関数)
SELECT UPPER('abc') FROM DUAL
--結果:ABC
半角英大文字を小文字に変換する(LOWER関数)
SELECT LOWER('ABC') FROM DUAL
--結果:abc
文字列の情報を取得する
文字列の長さを文字数で取得する(LENGTH関数)
SELECT LENGTH('あいAB') FROM DUAL
--結果:4
文字列の長さをバイト数で取得する(LENGTHB関数)
SELECT LENGTHB('AB') FROM DUAL
--結果:2
SELECT LENGTHB('あい') FROM DUAL
--結果:6
※ 全角文字の場合、使用しているキャラクタセットによりバイト数は異なります。例えば UTF-8 の場合は全角文字1文字が3バイトになります。
文字列の開始位置から後ろの文字列を取得する(SUBSTR関数、SUBSTRB関数)
構文
SUBSTR(文字列, 開始位置)
--バイト単位
SUBSTRB(文字列, 開始位置)
SELECT SUBSTR('あいうえお', 3) FROM DUAL
--結果:うえお
--バイト単位
SELECT SUBSTRB('あいうえお', 3) FROM DUAL
--結果:いうえお
文字列の開始位置から文字数分の文字を取得する(SUBSTR関数、SUBSTRB関数)
構文
SUBSTR(文字列, 開始位置, 文字数)
--バイト単位
SUBSTRB(文字列, 開始位置, 文字数)
SELECT SUBSTR('あいうえお', 2, 3) FROM DUAL
--結果:いうえ
--バイト単位
SELECT SUBSTRB('あいうえお', 4, 6) FROM DUAL
--結果:いう
文字列の出現位置を取得する(INSTR関数、INSTRB関数)
構文
INSTR(文字列 , 検索文字列 )
--バイト単位
INSTRB(文字列 , 検索文字列 )
SELECT INSTR('あいうえお', 'う') FROM DUAL
--結果:3
--バイト単位
SELECT INSTRB('あいうえお', 'う') FROM DUAL
--結果:7
正規表現を使って文字列の出現位置を取得する(REGEXP_INSTR関数)
構文
REGEXP_INSTR(文字列, 検索パターン)
--数字が最初に出現する位置
SELECT REGEXP_INSTR('abc123hij', '[0-9]') FROM DUAL
--結果:4
--検索開始位置が4でアルファベットの「a~z」が出現する位置
SELECT REGEXP_INSTR('abc123hij', '[a-z]', 4) FROM DUAL
--結果:7
以上、文字列を操作するSQL関数について解説しました。