現在勉強しているオラクルマスターブロンズ(SQL)についてまとめたものです。
自分のアウトプット用なので見やすさなどは期待しないでください。
SQL関数の概要と単一行関数の基本
SQL関数(SQLファンクション)とは、Oracleデータベースにあらかじめ組み込まれている関数で、大きく単一行関数とグループ関数に分類される。
単一行関数は1件の入力データごとに処理を行い、入力データごとに結果を1つ戻す関数。
グループ関数は複数件の入力データをグループ化して、累計処理を行った結果を1つだけ戻す関数。
単一行関数は任意のレベルにネスト(関数の引数に別の関数を指定すること)できる。
関数をネストした場合、内側の関数から順番に処理されて、その戻り値が外側の関数の引数になる。
文字関数
文字関数は、引数として文字値を受け入れ、文字または数値を戻す関数で、大文字・小文字変換関数と文字操作関数に分類できる。
大文字・小文字変換関数
大文字・小文字変換関数は、引数として受け入れた文字列の大文字・小文字を変換する。
UPPER関数は、引数として受け入れた文字列を全て大文字に変換して戻す関数。
条件の中ではデータの大文字・小文字は区別されるため、どちらで登録されているかわからない場合や、行によってバラバラだった場合、指定が困難になる。
このような時に、UPPER関数を使用して列の値を全て大文字に変換した上で、大文字の文字列と比較すれば目的のデータを取り出せる。
LOWER関数は、引数として受け入れた文字列をすべて小文字に変換して返す関数。
INITCAP関数は、引数として受け入れた文字列に含まれる単語の先頭文字を大文字に、2文字目以降を小文字に変換して戻す関数。
単語の区切りはスペースまたは英数字以外の文字で指定する。
文字操作関数
文字操作関数は、引数として受け入れた文字列に対して各種の操作を行う。
CONCAT関数は、引数として受け入れた2つの文字列を結合して戻す関数。
3つ以上の文字列を結合することはできない。
SUBSTR関数は、引数として受け入れた文字列のm番目の文字からn文字分の文字列を返す(部分文字列を返す)関数。
nを省略した場合、m文字目から末尾の文字までを戻す。
なお、mに負の値を指定すると、文字列の後ろから数えてm文字目からn文字分の文字列が戻される。
LENGTH関数は、引数として受け入れた文字列の文字数を戻す関数で、全角の文字や記号も1文字としてカウントされる。
INSERT関数は、指定した文字パターンが現れる位置を戻す関数。
引数として受け入れた文字列1のm文字目から文字列2を検索し、n番目に一致した文字列の位置(先頭からの文字数)を戻す。
mおよびnが省略された場合のデフォルト数は1で、文字列の最後まで文字列2がない場合は0を戻す。
LPAD関数、RPAD関数は、引数として受け入れた文字列がn文字になるように、埋め込み文字を埋め込んで戻す関数で、LPAD関数では文字列の左側に、RPAD関数では右側に埋め込まれる。
TRIM関数は、引数として受け入れた文字列の前後にある削除文字(任意の1文字)を取り除いて戻す関数で、削除文字が省略された場合は、半角スペースが取り除かれる。
削除位置の指定
引数 | 説明 |
---|---|
LEADING | 文字列の先頭にある削除文字を削除する |
TRAILING | 文字列の末尾にある削除文字を削除する |
BOTH | 文字列の先頭及び末尾にある削除文字を削除する(デフォルト) |
REPLACE関数は、引数として受け入れた文字列の内、変更前文字列を変更後文字列に置き換えた文字列を戻す関数で、変更後文字列が省略された場合は、文字列から変更前文字列を削除した文字列を戻す。
数値関数
数値関数は、引数として数値を受け入れ、数値を戻す関数。
主な数値関数
ROUND関数は、引数に指定された数値を小数点n桁に四捨五入して戻す関数で、引数nが省略された場合は整数値に四捨五入する。
また、引数nに負の値が指定された場合は、数値に応じて一の位から四捨五入される。
TRUNC関数は、引数に指定された数値を小数点nけたに切り捨てて戻す関数で、引数nが省略された場合は整数値になるように切り捨てる。
ROUND関数と同じように負の値も指定できる。
MOD関数は、引数nを引数mで割った余りを戻す関数。
日付関数
日付関数は、日付値を引数として受け入れ、日付または数値を戻す関数。
日付値の基礎知識
Oracleデータベースが扱う日付値には、以下の特徴がある。
- 日付値は世紀、年、月、日、時、分、秒を表す内部的な数値書式で格納される。
- 日付値にはデフォルトの表示書式がある。
- 英語環境のデフォルトの表示書式はDD-MON-RR(日-月-年)
- 日本語環境のデフォルトの表示書式はRR-MM-DD(年-月-日)
- 日付値に対して加算・減算などを行うことができる。
日付値の計算
SQL文で日付値に対して実行できる、主な加算・減算処理は以下の通り。
- 日付値+数値および日付値-数値
- 日付値+数値/24および日付値-数値/24
- 日付値-日付値
なお、日付値に対して除算や乗算は実行できず、日付値同士を加算することもできない。
日付値に数値を加算すると、指定した数値が日数として加算される。
減算の場合も同様で、これらの計算結果は日付値になる。
日付値に数値/24を加算すると、指定した数値が時間数として加算される。
減算の場合も同様で、これらの計算結果も日付値になる。
日付値から日付値を減算すると、指定した2つの日付値の間に経過した日数が戻される(1日以下の値は小数として戻される)。
日付関数
SYSDATE関数は、**現在の日付(日時)**を戻す関数。
MONTHS_BETWEEN関数は、引数として受け入れた2つの日付間の月数を戻す関数で、日付1が日付2よりも前の日付の場合は、負の数値を戻す。
ADD_MONTHS関数は、引数に指定した日付のnヶ月後の日付を戻す関数で、引数nに負の値を指定するとnヶ月前の日付が戻される。
引数の日付に月の最終日を指定すると、戻される値も2番目の引数で指定した月数後の月の最終日になる。
NEXT_DAY関数は、引数に指定された日付の翌日以降に、指定された曜日になる最初の日付を戻す関数。
LAST_DAY関数は、引数に指定された日付を含む月の、最終日の日付を戻す関数。
ROUND関数は、数値関数と同じように引数として日付を受け入れることもでき、引数に指定された日付値を四捨五入して戻す。
どの単位で四捨五入するかは書式で指定する。
指定できる主な書式
書式 | 説明 |
---|---|
YEAR | 指定した日付が6月30日以前の場合は当年の1月1日午前0時を、7月1日以降の場合は翌年の1月1日午前0時を戻す。 |
MONTH | 指定した日付が15日以前の場合は当月の1日午前0時を、16日以降の場合は翌月の1日午前0時を戻す。 |
DD | 指定した日付が正午より前の場合は当日の午前0時を、正午以降の場合は翌日の午前0時日付を戻す(デフォルト)。 |
TRUNC関数も数値関数と同じように引数として日付を受け入れることもでき、引数に指定された日付値を切り捨てて戻す。
どの単位で四捨五入するかは書式で指定する。
指定できる主な書式
書式 | 説明 |
---|---|
YEAR | 当年の1月1日午前0時を戻す。 |
MONTH | 当月の1日午前0時を戻す。 |
DD | 当日の午前0時を戻す(デフォルト)。 |