第4章	単一行関数

4.2文字関数

■大文字・小文字関数
UPPER 関数 全て大文字に変換して戻す関数
LOWER 関数 全て小文字に変換して戻す関数
INITCAP 関数 単語の先頭文字を大文字に、2文字目以降は小文字に変換して戻す関数

■文字操作関数
CONCAT 関数 2つの文字列を結合して戻す関数
SUBSTR 関数 M番目の文字からN文字文の文字列を戻す関数
LENGTH 関数 文字数を戻す関数
INSTR 関数 指定した文字パターンが現れる位置を戻す関数
LPAD 関数 N文字に成るように左側に埋め込み文字を埋め込んで戻す関数
RPAD 関数 N文字に成るように右側に埋め込み文字を埋め込んで戻す関数
TRIM 関数 前後に有る削除文字を取り除いて戻す関数
REPLACE 関数 変更前文字列を変更後文字列に置き換えて、戻す関数

■数値関数
ROUND 関数 小数点以下n桁に四捨五入して戻す関数
TRANC 関数 小数点以下n桁に切り捨てて戻す関数
MOD 関数 引数nを引数mで割った余りを戻す関数

■日付関数
SYSDATE 関数
MONTHS_BETWEEN 関数
ADD_MONTHS 関数
NEXT_DAY
LAST_DAY
ROUND
TRUNC

■CONCAT関数
引数として、受け入れた2つの文字列を結合して戻す関数である。
連結演算子||を使用して、2つの文字列を結合した場合と同じ結果を戻す。

CONCAT(文字列1, 文字列2)
引数は、文字列でなくても、数値や日付であっても、暗黙的な変換で文字列に変換される。

■REPLACE関数
REPLACE関数は、引数として、受け入れた文字列のうち、変更前文字列を変更後文字列に置き換えた文字列を戻す関数である。

REPLACE(文字列, 変更前文字列,変更後文字列)

主な数値関数
■ROUND関数
SELECT ROUND(12345.678, 1) AS A1
,ROUND(12345.678,0) AS A2
,ROUND(12345.678) AS A3
,ROUND(12345.678, -1) AS A4
,ROUND(12345.678, -2) AS A5
,TRUNC(ROUND(135.79, -1), -2) AS A6
FROM dual;

A1A2A3A4A5A6
12345.712346123461235012400100

ROUND関数の引数nが正数の場合は、小数点以下を四捨五入する。
引数nが負数の場合は、-1は、一の位を四捨五入し、-2は、十の位が四捨五入される。

■TRUNC関数
引数に指定された数値を小数点以下n桁に切捨てて戻す関数である。
SELECT TRUNC(12345.678, 2) AS B1
,TRUNC(12345.678, -1) AS B2
,TRUNC(12345.678) AS B3
FROM dual;

B1B2B3
12345.671234012345

■日付値の基礎知識
日付値は、世紀、年、月、日、時、分、秒を表す内部的な数値書式で格納される。
日付値には、デフォルトの表示書式がある。
英語環境のデフォルトの表示書式は、DD-MON-RR(日-月-年) MONは、JANUARY、FEBRARYなど英単語でセットできる。
逆に01や03などはMONで暗黙の変換ができないため、エラーとなる。
日本語環境のデフォルトの表示書式は、RR-MM-DD(年-月-日)
日付値に対して加算・減算などを行うことができる。

MONTHS_BETWEEN関数
引数として、受け入れた2つの日付間の月数を戻す関数である。
1ヶ月以下の値は、小数として戻される。 日付は、月数に置換される。

MONTHS_BETWEEN(日付1, 日付2)
日付1が日付2よりも前の日付の場合は、負の数値を戻す。
日付1が新しい日、日付2が古い日の組合せ結果は、正数となる。
日付1が古い日、日付2が新しい日の組合せは、負数となる。
例)
SELECT ID, NAME1 FROM KINZOKU_DB1
WHERE MONTHS_BETWEEN(SYSDATE, KINZOKU_YMD) >= 240;
勤続20年以上の社員を抽出する。

■ADD_MONTHS関数
引数に指定した日付のnヶ月後の日付を戻す関数である。
引数nに負数を指定すると、nヶ月前の日付が戻される。

ADDMONTHS(日付,n)

ADD_MONTHSで、月末日付の場合、前後の月も月末となる
9月30日 -1 = 8月31日
30日ではなく、その月の末日の31日がセットされる。

セッションタイムゾーンの現在の日付を戻す関数は、CURRENT_DATEである。
セッションが動作している現地の日付を知りたい場合は、CURRENT_DATE関数を使う。

■INSTR関数

INSTR(文字列 , 検索文字列) = 数値を戻す

SELECT INSTR(‘Oracle Server’, ‘er’, 1, 2) AS T1, INSTR(文字列、検索文字、開始位置、回数)
INSTR(‘Oracle Server’, ‘er’) AS T2
FROM dual;

T1T2
129