LoginSignup
0
0

More than 3 years have passed since last update.

業務で初めて知ったSQL関数【Oracle】

Last updated at Posted at 2021-01-23

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

参考

Oracle初心者でもスッキリわかる
SHIFT the Oracle

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0