これまでSQL Server(SQL Server Management Studio = SSMS)を使っていたが、プロジェクトでOracleを使用することになったため、色々といじったり調べたりしながら便利だと思った関数などをまとめた。
DUAL
まず関数ではないが、これから紹介する関数を呼び出す際に使用するものとして DUAL
がある、これはOracle上で使用されているダミーテーブルであり、このダミーテーブルには「DUM」と言うカラムだけあり、その中のレコードには「x」一つだけが格納されているものである。
このダミーテーブルは何のために使用するかと言うと、レコードの値は参照せずに関数だけ利用したいと言ったときに使う。よく使われるのはシステム日付の取得であると思う。それ以外では関数だけの動作チェックとかにも使用可能。
ちなみにこのDUAL表だがMySQLにもあるようである。
SYSDATE関数
SYSDATE関数はその名の通りシステム日付を取得する関数である。
使い方としては先述のDUALと組み合わせて
と言うように使う。これによりシステム日付をDATE型で取得することができるが、これによって取得できるシステム日付は YY-MM-DD
形式で少々使いづらい。例えば2023/10/4 15:20:50
に取得した場合 23-10-04
と出力される。そのようなときに使うのが次に紹介する関数である。
TO_CHAR
この TO_CHAR
関数はDATE(日付)型やNUMBER(数字)型を文字列型に変換すると言う単純なものだが、この時に書式を自由に変更できるため便利な関数である。使い方としては先述のSYSDATE関数と組み合わせて
SELECT TO_CHAR(SYSDATE , 'YYYY.MM.DD HH24:MI:SS') FROM DUAL
といったように使う。これを先述の 2023/10/4 15:20:50
に取得したとすると、2023.10.04 15:20:50
と成形して出力されるようになる。
構文は以下。書式は省略可能で書式を省略するとデフォルトの設定で出力される、因みに書式は'
(シングルクオーテーション)で囲わないとエラーが出るので注意。
TO_CHAR( 日付または数字 , '書式' )
書式は色々と変えることができる。”(ダブルクオーテーション)で囲えば日本語も指定可能。例えば
SELECT TO_CHAR(SYSDATE , 'YYYY"年"MM"月"DD"日" HH24"時"MI"分"SS"秒"') FROM DUAL
と言うようにすれば 2023年10月04日15時20分50秒
となる。
ちなみに当たり前だが流石に和暦には対応していない。その辺はストアドなりソース上で変換するなりしよう。
NVL関数
NVL関数は取得したレコードが NULL
だった時に指定した値を出力することが出来るという物である。構文は
となり、使用例として
SELECT NVL(FLG1,1) FROM FLAG_T
とすると FLAG_T
テーブルの FLG1
カラムの値がNULLの場合 1
にして表示するようになる。
因みにNVL関数を使用しない場合は
SELECT CASE WHEN FLG1 IS NULL THEN 1 ELSE FLG1 FROM FLAG_T
で同じ処理になり、CASE文であればELSEで条件を増やせばNULL以外にも対応可能だが、NULLだけを変換するのであればNVL関数を使った方が見た目がすっきりするので可読性も上がり解り易いだろう。
他にも関数はいろいろあるが、これ以上は長くなりそうなので先ずはこれまで。