これまでSQL Server(SQL Server Management Studio = SSMS)を使っていたが、プロジェクトでOracleを使用することになったため、色々といじったり調べたりしながら便利だと思った関数などをまとめた。

DUAL

まず関数ではないが、これから紹介する関数を呼び出す際に使用するものとして DUAL がある、これはOracle上で使用されているダミーテーブルであり、このダミーテーブルには「DUM」と言うカラムだけあり、その中のレコードには「x」一つだけが格納されているものである。

このダミーテーブルは何のために使用するかと言うと、レコードの値は参照せずに関数だけ利用したいと言ったときに使う。よく使われるのはシステム日付の取得であると思う。それ以外では関数だけの動作チェックとかにも使用可能。

ちなみにこのDUAL表だがMySQLにもあるようである。

SYSDATE関数

SYSDATE関数はその名の通りシステム日付を取得する関数である。

使い方としては先述のDUALと組み合わせて

SELECT SYSDATE FROM 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 だった時に指定した値を出力することが出来るという物である。構文は

NVL(対象文字列 , 変換文字列)

となり、使用例として

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関数を使った方が見た目がすっきりするので可読性も上がり解り易いだろう。

他にも関数はいろいろあるが、これ以上は長くなりそうなので先ずはこれまで。