■文字列関数
-CHAR, VARCHAR2タイプの引数をVARCHAR2タイプの値を返す関数
・CONCAT(char1, char2):Concatenationの略称で文字列を結合した結果を返す。「||」演算子と同じ役割。
--CONCAT例
SQL> SELECT CONCAT('mission-oraclemaster.','blogspot')||'.jp' name FROM DUAL;
NAME
--------------------------------
mission-oraclemaster.blogspot.jp
SQL>
・INITCAP(char), LOWER(char), UPPER(char)
-INITCAP:文字列の最初も文字を大文字に変換
-LOWER:文字列を小文字に変換
-UPPER:文字列を大文字に変換
--INITCAP, LOWER, UPPER例
SQL> SELECT INITCAP('oracle-master') name FROM DUAL
2 UNION ALL
3 SELECT UPPER('oracle-master') name FROM DUAL
4 UNION ALL
5 SELECT LOWER('oracle-master') name FROM DUAL;
NAME
-------------
Oracle-Master
ORACLE-MASTER
oracle-master
・LPAD(char1, n[, char2]). RPAD(char1, n[, char2])
-LPAD:文字列の左に指定文字を埋める
-RPAD:文字列の右に指定文字を埋める
※nは返す文字列の長さを表し、char1の文字列がnより大きい場合、char1をn個の文字列を返す
--LPAD,RPAD例
SQL> SELECT LPAD('oracle-master', 15, '*') name FROM DUAL
2 UNION ALL
3 SELECT RPAD('oracle-master', 15, '*') name FROM DUAL;
NAME
---------------
**oracle-master
oracle-master**
・SUBSTR(char, m, [n]), SUBSTRB(char, m, [n])
-SUBSTR関数はm番目から長さがn個の文字列を返す
-mが負数の場合後ろからm番目文字からn個の文字を返す
-SUBSTRB関数でBはByte単位で処理するを意味する
--3番目の文字列から返す
SQL> SELECT SUBSTR('oracle-master', 3) name FROM DUAL;
NAME
-----------
acle-master
--3番目から4つの文字列を返す
SQL> SELECT SUBSTR('oracle-master', 3, 4) name FROM DUAL;
NAME
----
acle
--後から3番目から2つの文字列を返す
SQL> SELECT SUBSTR('oracle-master', -3, 2) name FROM DUAL;
NA
--
te
--DBがUTF-8の場合
SQL> SELECT SUBSTRB('オラクルマスター' , 1) name FROM DUAL
2 UNION ALL
3 SELECT SUBSTRB('オラクルマスター' , 3) name FROM DUAL;
NAME
----------------
オラクルマスター
ラクルマスター
・LENGTH(char), LENGTHB(char):文字列の長さを返す
--文字列のLENGTHを検索する例
--DBがUTF-8の場合
SQL> SELECT LENGTH('オラクルマスター') len FROM DUAL
2 UNION ALL
3 SELECT LENGTHB('オラクルマスター') len FROM DUAL;
LEN
----------
8
16
・REPLACE(char1, str1,str2):文字列の特定文字を別文字に変換する
--REPLACE例
SQL> SELECT REPLACE('oracle-master','oracle','db') name FROM DUAL;
NAME
---------
db-master
--大文字、小文字を区別する
SQL> SELECT REPLACE('Oracle-Master', 'oracle', 'DB') name FROM DUAL
2 UNION ALL
3 SELECT REPLACE('Oracle-master', 'Oracle', 'DB') name FROM DUAL;
NAME
-------------
Oracle-Master
DB-master
・INSTR(char1, str1, m, n)
-文字列が含まれているかを調査して文字列の位置を返す
-指定の文字列が無ければ0が返される
-char1 : 指定文字、str1 : 検索文字、m : 開始位置、n : 検索順位
--指定した文字「OK」が無いので0を返す
SQL> SELECT INSTR('CORPORATE FLOOR' , 'OK') idx FROM DUAL;
IDX
----------
0
--ORがある位置2を返す。左から比較する。
SQL> SELECT INSTR('CORPORATE FLOOR' , 'OR') idx FROM DUAL;
IDX
----------
2
--左から3番目からORを検索し位置を返す
SQL> SELECT INSTR('CORPORATE FLOOR', 'OR' , 3) idx FROM DUAL;
IDX
----------
5
--左から3番目から比較し、ORが2回目に検索された位置を返す
SQL> SELECT INSTR('CORPORATE FLOOR', 'OR', 3, 2) idx FROM DUAL;
IDX
----------
14
・TRIM(char1[,char2]), LTRIM(char1[,char2]), RTRIM(chaar1[,char2])
-TRIM:特定文字を削除する。削除する文字を入力しないと空白が削除される
-LTRIM:左から文字を削除する。削除する文字を入力しないと左の空白が削除される
-RTRIM:右から文字を削除する。削除する文字を入力しないと右の空白が削除される
--oと空白を削除するTRIM例
SQL> SELECT TRIM('o' FROM 'oracle-master') name FROM DUAL;
NAME
------------
racle-master
SQL> SELECT TRIM('o' FROM 'oracle-master') name FROM DUAL
2 UNION ALL
3 SELECT TRIM(' oracle-master ') name FROM DUAL;
NAME
-------------
racle-master
oracle-master
--左側の文字列TRIM例
--空白の場合、左の空白だけ削除される
SQL> SELECT LTRIM('orcle-master' , 'oracle') name FROM DUAL
2 UNION ALL
3 SELECT REPLACE(LTRIM(' oracle-master '), ' ', '*') name FROM DUAL;
NAME
--------------
-master
oracle-master*
--右側の文字列TRIM例
--空白の場合、右の空白だけ削除される
SQL> SELECT RTRIM('oracle-master', 'master') name FROM DUAL
2 UNION ALL
3 SELECT REPLACE(RTRIM(' oracle-master '), ' ', '*') name FROM DUAL;
NAME
--------------
oracle-
*oracle-master