単一行関数を使用し、問い合わせ対象の表やビューの各行に対して、単一の結果行を戻します。
■一般関数
| 関数 | 説明 |
| NVL(expr,val) | exprがNULLの場合valを戻す |
| NVL2(expr,val1,val2) | exprがNULL以外の場合val1を、NULLの場合val2を戻す |
| NULLIF(expr1,expr2) | expr1とexpr2が等しい場合はNULLを、等しくない場合はexpr1を戻す |
| COALESCE(expr1,...exprn) | exprの中の最初のNULLでない値を戻す |
| UID | 現在のユーザーID(ログインしているユーザを一意に識別する値) |
| USER | 現在のユーザー名 |
■数値関数:文字列関数は文字を受け取り、文字や数値を戻します。
| 関数 | 説明 |
| CEIL(n) | n以上の最も小さい整数を戻す |
| FLOOR(n) | n以下の最も大きい整数を戻す |
| MOD(m,n) | mをnで除した余りを戻す |
| POWER(m,n) | mをn乗した値を戻す |
| SQRT(n) | nの平方根を戻す |
| ROUND(m,n) | mを少数点以下n桁で四捨五入する |
| TRUNC(m,n) | mを少数点以下n桁で切り捨てる |
■文字列関数:文字列関数は文字を受け取り、文字や数値を戻します。
| 関数 | 説明 |
| LENGTH(char) | 文字列charの長さを戻す |
| LENGTHB(char) | 文字列charの長さをバイト数で戻す |
| INSTR(char1,char2,n,m) | char1のn番目の文字からm文字の長さの文字列を抜き出して戻す
|
| SUBSTR(char,n,m) | charのn番目の文字からm文字の長さの文字列を分を抜き出して戻す |
| INITCAP(char) | 各単語の先頭の文字を大文字に、残りを小文字に変換して戻す |
| UPPER(char) | charを全て大文字に変換する |
| LOWER(char) | charを全て小文字に変換する |
| TRIM([LEADING|TARILIMG|BOTH][char1 FROM]char2) | char1をchar2から切り捨てて戻す |
| LTRIM [char] | charの左側の空白を取り除く |
| RTRIM [char] | charの右側の空白を取り除く |
| REPLACE(char1,char2,char3) | char1からchar2を検索してchar3に置換して戻す |
| LPAD | 文字値の左側にn文字の位置まで指定された文字列を埋め込む |
| RPAD | 文字値の右側にn文字の位置まで指定された文字列を埋め込む |
| CONCAT | 文字列を連結する |
■日付関数:日付関数はOracleの日付を操作します。日付関数はDATEデータ型を戻します。
(日付データでは算術演算子(加算、減算)を使った演算も可能です。)
| 関数 | 説明 |
| ADD_MONTHS(d,n) | 日付dにnヶ月を加算した値を戻す |
| LAST_DAY(d) | 指定した月の最終日を戻す |
| NEXT_DAY(d,char) | 次のchar曜日を迎える日付を戻す |
| MONTHS_BETWEEN(d1,d2) | 日付d1とd2の日付間の月数を戻す |
| SYSDATE | 現在の日付を戻す |
| ROUND(d,fmt) | fmtで指定した単位に日付dを四捨五入する |
| TRUNC(d,fmt) | fmtで指定した単位に日付dを切り捨てる |
■変換関数:変換関数は、値のデータ型を別のデータ型に変換します。
| 関数 | 説明 |
| TO_NUMBER(char,fmt,nlsparams) | 書式fmtで指定したcharをNUMBER型に変換して戻す |
| TO_CHAR(n,fmt,nlsparams) | 書式fmtで指定したnを文字型に変換して戻す |
| TO_CHAR(d,fmt,nlsparams) | 書式fmtで指定したdを文字型に変換して戻す |
| TO_DATE(char,fmt,nlsparams) | 書式fmtで指定したcharを日付型に変換して戻す |
■分岐関数:条件に一致した値を戻す。
| 関数 | 説明 |
SELECT CASE expr WHEN val1 THEN rtn1 WHEN val1 THEN rtn2 ELSE rtnn END | exprの値がval1の場合rtn1を、valnの場合rtnnを戻す |
| DECODE(expr,val1,rtn1,val2,rtn2, ...valn,rtnn) | 同上 |
■その他関数
| 関数 | 説明 |
| GREATEST(expr,expr) | exprの中の最大値を戻す |
| LEAST(expr,expr) | exprの中の最小値を戻す |
| 3-2 書式モデル |
■日付や数値を文字列にするTO_CHAR関数や、文字列を日付に変換するTO_DATE関数では、書式を指定することができる
■日付書式:TO_CHAR(列または値,‘書式’) | 書式 | 説明 | | YYYY | 4桁の年(例 2000) | | MM | 2桁で表示した月(例 01~12) | | MONTH | 月の完全な名前(例 1月~12月 または JANUARYからDECEMBER) | | MON | 月の略称(JANからDEC) | | DD | 各月の日(例 01~31) | | DAY | 曜日の完全な名前(例 日曜日~土曜日) | | DY | 曜日の略称(例 日~土) | | D | 周における曜日(例 1~7) | | HH または HH12 | 12時間制表記の時間 | | HH24 | 24時間制表記の時間 | | MI | 分 | | SS | 秒 | | RR | 指定した下2桁の年と現在の年の下2桁により戻される世紀を変える | | 指定された年の下2桁 | | 00-49 | 50-99 | | 現在の年の下2桁 | 00-49 | 戻される年の上2桁は今の100年 | 戻される年の上2桁は1つ前の100年 | | 50-99 | 戻される年の上2桁は1つ先の100年 | 戻される年の上2桁は今の100年 | | ■数値書式:TO_CHAR(列または値,‘書式’) | 書式 | 説明 | | 9:999 | 9の数が有効桁数を表す | | 0:099 | 先行ZEROを戻す | | $:$999 | $記号を値の前に戻す | | L:L999 | 通貨記号を値の前に戻す | | ,:999,999 | 指定した位置にカンマを戻す | | .:999.99 | 指定した位置にピリオドを戻す | | G:999G999 | 指定した位置にグループ区切り文字を戻す | | D:99D99 | 指定した位置にピリオドを戻す |
|
| 3-3 グループ関数 |
■グループ関数を使用し、行のグループに基づく結果を戻します。 ?グループ関数には、DISTINCTやALLのオプションを指定することができる。 | 関数 | 説明 | 例 | | AVG(n) | nの平均値を戻す | SELECT AVG(SALARY) FROM EMPLOYEES; | | COUNT(expr) | exprがNULLでない行数を戻す | SELECT COUNT(DISTINCT JOB_ID) FROM EMPLOYEES; | | MAX(expr) | exprの最大値を戻す | SELECT MAX(SALARY) FROM EMPLOYEES; | | MIN(expr) | exprの最小値を戻す | SELECT MIN(SALARY) FROM EMPLOYEES; | | SUM(n) | nの合計値を戻す | SELECT SUM(SALARY) FROM EMPLOYEES; | ■GROUP BY句の基本構文 SELECT 列名リスト,グループ関数 FROM 表名リスト WHERE 条件式 GROUP BY グループ化する基準 ?GROUP BY句を使用して表内の行をグループ化することができます。 ?SELECT句内に列名を指定した場合はGROUP BY句に同じ列名を指定しなければなりませんが、逆にGROUP BY句に指定した列名はSELECT句に必ずしも指定する必要はありません。 ?WHERE句にグループ関数は使用できません。グループ関数による条件指定をする場合にはHAVING句を使用します。 ?GROUP BY句は必ずWHERE句の後に指定します。
■HAVING句の基本構文 SELECT 列名リスト,グループ関数 FROM 表名リスト WHERE 条件式 GROUP BY グループ化する基準 HAVING グループ化する条件 ?問い合わせで戻すグループを制限する場合にはHAVING句を使用します。HAVING句の条件を満たすグループのみ戻されます。 ?HAVING句、GROUP BY句はWHERE句の後に、ORDER句は最後に配置します。また、HAVING句はGROUP BY句の前でも後でも配置できます。 ?評価の順番は以下の通りになります。 WHERE句 → GROUP BY句 → HAVING句 |
Trackback: http://tb.donews.net/TrackBack.aspx?PostId=51773