2020年9月にSESに入社し、12月から現場に出て2ヶ月目の新人です。
SQLは今まで「スッキリわかるSQL入門」などで基礎の基礎は学んできましたが、
このたび500行を超えるSQL文を読むことになり、Oracleが初めてなのもあって
初めて知ったSQL関数がありましたので備忘録として書いていこうと思います。
ROW_NUMBER
SELECT文の結果に対して、1〜の連番を振ります。
-- 構文
ROW_NUMBER() OVER (
PARTITION BY カラム名, カラム名, ... ORDER BY カラム名, カラム名, ...)
PARTITION BY
GROUP BYのような感じで、集計したいカラム名を指定します。
DECODE
カラムの値によって条件分岐させて値を変換できます。
-- 構文
SELECT
DECODE(カラム名, 値1, 結果1, 値2, 結果2, 結果3)
FROM テーブル名;
-- 値1だったら結果1、値2だったら結果2、それ以外は結果3
CASE式でも書けます。
DECODEは条件に比較演算子や式を使えませんが、CASE式では使えます。
CASE カラム名
WHEN 値1 THEN 結果1
WHEN 値2 THEN 結果2
ELSE 結果3
END
SUBSTR
文字列を指定桁数から指定文字数分切り取ります。
-- 構文
SUBSTR(文字列, 開始桁, 切り取り文字数)
NVL
値がNULLだったら、別の値に変換できます。
-- 構文
SELECT
NVL(カラム名, 変換したい値)
FROM テーブル名;
TO_CHAR
数値や日時を文字列に変換します。
TO_CHAR(日付)
TO_CHAR(日付, 'YYYYMMDD(指定したい書式)')
WITH
副問い合わせに名前をつけます。
以降、その名前だけで副問い合わせを使用できます。
WITH '名前' AS (副問い合わせ)
さいごに
例文や実行結果も書こうかと思ったのですが、いい例が思い浮かばなかったので、
とりあえず構文だけ書かせてもらいました。
私が読んでいたSQL文ではDECODEが入れ子になっていたり、
SUBSTRも組み合わさっていたり、「??」という感じでした。
徐々に読めるようになっていきたいと思います。
<追記>
・2021/03/27、TO_CHAR、WITH