- 4.2 単一行関数のネスト
単一行関数のネストの深さに制限はない
グループ関数のネストは第2レベルまで
- 4.4 文字関数
関数 | 実行例 | 意味 | 結果 |
INITCAP | INITCAP('ORACLE Master') | 指定文字列の先頭を大文字に、 以降を小文字に変換 |
Oracle Master |
INSTR | INSTR('GoodMorning') | 指定文字列の数値位置を表示 | 5 |
LPAD | LPAD('Good',6,'*') | 左に文字列を埋め込む | **Good |
RPAD | RPAD('Good',6,'*') | 右に文字列を埋め込む | Good** |
TRIM | TRIM('G' FROM 'GoodMorning') | 先行/後続文字列の切捨て | oodMorning |
- 4.9 TRUNC関数の切捨て桁位置
TRUNC関数では、指定された数値の位置の1つ右の桁を切り捨てる。
TRUNC(123.456,2) | 少数点以下2桁目の一つ右、つまり小数点以下3桁目を切り捨て | 123.46 |
TRUNC(123.456,-2) | 小数点以下-2桁の一つ右、つまり10の位を切り捨て | 100 |
ROUND関数も同様の桁位置を四捨五入する
- 4.13 日付データ操作のポイント
- 日付-日付=日数となる
- 日付+日付はエラーになる
- 4.14 日付関数
関数 | 実行例 | 意味 | 結果 |
MONTH_BETWEEN | MONTH_BETWEEN('2000-08-25','2000-05-10') | 日付間の月数 | 3.48387097 |
ADD_MONTH | ADD_MONTHS('2000-08-25',-3) | 月数を加減算 | 2000-05-25 |
NEXT_DAY | NEXT_DAY('2002-08-22','月曜日') | 指定曜日の次の日付 | 2002-08-26 |
LAST_DAY | LAST_DAY('2002-02-01') | 指定月の最終日 | 2002-02-28 |
- 4.15 NEXT_DAY関数の第2引数
NEXT_DAY関数の第2引数として、曜日を文字列で指定するだけでなく、数値で指定することもできる。その場合、日曜が1、月曜日が2、最後の土曜日が7である。
NEXT_DAY('2002-08-22','月曜日')とNEXT_DAY('2002-08-22',1)は同じ意味
- 4.17 日付についてのROUND/TRUNC
日付についてもROUNDまたはTRUNC関数を使用できる。
第2引数を省略した場合、時間を四捨五入(切捨て)する['DAY'を指定するのと同じ]
◆日を四捨五入
第2引数を省略した場合、時間を四捨五入(切捨て)する['DAY'を指定するのと同じ]
◆日を四捨五入
ROUND('2002-07-16','MONTH')・・・(結果)2002-08-01
◆月を切り捨て
TRUNC('2002-07-16','YEAR')・・・(結果)2002-01-01
- 4.19 日付書式要素
年 | |
YYYY | 4桁の年 |
YY | 年の下2桁 |
月 | |
MM | 2桁の月(01~12) |
MON | 月の省略形(JAN~DEC) |
MONTH | 完全な月(JANUARY~DECEMBER) |
日 | |
DD | 日(01~31) |
曜日 | |
DY | 曜日の省略形(SUN~SAT) |
DAY | 完全な曜日(SUNDAY~SATURDAY) |
時間 | |
HH | 12時間制の時間 |
HH24 | 24時間制の時間 |
MI | 分 |
SS | 秒 |
AMまたはPM | 正午標識 |
A.M.またはP.M. | ピリオド付きの正午標識 |
- 4.21 FM修飾子
FMとはFill mode(埋め込みモード)のことである。
◆FM修飾子はTO_CHAR関数の中で指定することができる。
◆日付書式を修飾した場合、埋め込み空白と先行ゼロを回避する。
◆FMは複数指定できる。1つめのFM以降は回避を有効、2つめ以降は無効、3つめ以降は有効というように、回避の有効/無効を切り替える。
◆FM修飾子はTO_CHAR関数の中で指定することができる。
◆日付書式を修飾した場合、埋め込み空白と先行ゼロを回避する。
◆FMは複数指定できる。1つめのFM以降は回避を有効、2つめ以降は無効、3つめ以降は有効というように、回避の有効/無効を切り替える。
【日付書式の例(09-03-04 09:15:00)】
fm修飾子の有無 | 書式 | 表示 |
なし | MM-DD-RR HH24:MI:SS | 09-03-04 09:15:00 |
あり | fmMM-DD-RR HH24:MI:SS | 9-3-4 9:15:0 |
あり(複数) | fmMM-DD-RR fmHH24:MI:fmSS | 9-3-4 09:15:0 |
【書式DDSPTH/Ddspth】
書式DDSPTHは日付を大文字フルスペルの序数で表示する。(例:FIRST)
書式Ddspthは先頭だけを大文字にし、古スペルの序数で表示する。(例:First)
書式DDSPTHは日付を大文字フルスペルの序数で表示する。(例:FIRST)
書式Ddspthは先頭だけを大文字にし、古スペルの序数で表示する。(例:First)
- 4.22 FX修飾子
FXとはFormat exact(厳密な書式一致)のことである。
◆FX修飾子はTO_DATE関数の中で指定できる。
◆文字引数が日付書式と厳密に一致しなければならないことを指定する(大文字・小文字を除く)
→通常は無視される、文字引数の余分な空白や選考行ゼロなどが、FXによりエラーになる。
◆FX修飾子はTO_DATE関数の中で指定できる。
◆文字引数が日付書式と厳密に一致しなければならないことを指定する(大文字・小文字を除く)
→通常は無視される、文字引数の余分な空白や選考行ゼロなどが、FXによりエラーになる。
- 4.28 TO_DATE関数での月日/時間の省略
◆TO_DATE関数にて、月日を省略して日付データを入力すると、月は当月、日は1日になる。
◆時間を省略した場合、デフォルトで午前0時0分0秒となる。
◆HH書式では深夜12時はAM12:00、正午はPM12:00となる
◆時間を省略した場合、デフォルトで午前0時0分0秒となる。
◆HH書式では深夜12時はAM12:00、正午はPM12:00となる
- 4.31 NULLを処理できる関数
関数 | 実行例 | 意味 |
NVL | NVL(comm, 0) | comm列がNULL値の場合は0を戻す |
NVL2 | NVL2(comm, sal + comm, 0) | comm列がNULLの場合は0、NULL以外の場合はsal+comm |
NULLIF | NULLIF(ename, mail) | enameとmailが等しい場合はNULL、等しくない場合はename |
COALESCE | COALESCE(comm, sal, 15) | リストの最初のNULLでない式を戻す |
DECODE関数はNULLを扱うことはできない!
◆DECODE関数と同じ意味でCASE文を使うこともできる
CASE [式] WHEN 条件1 THEN 値1
[WHEN 条件2 THEN 値2 ・・・]
[ELSE デフォルト値] END
CASE [式] WHEN 条件1 THEN 値1
[WHEN 条件2 THEN 値2 ・・・]
[ELSE デフォルト値] END