概要
Oracleで文字列結合する方法としては…
- ||(連結演算子)を使う。
- CONCAT()を使う。
の2種類がある。
この記事では上記2種類のやり方と、『||(連結演算子)を使う』方がおススメなことについて記載。
やり方(連結演算子の||を使う)
動作確認用SQL
SELECT
-- 2カラム結合。
カラム名1 || カラム名2 AS TWO_DAYO,
-- 3カラム結合。
-- 連結演算子の前後にスペースが無くてもOK。
カラム名1||カラム名2||カラム名3 AS THREE_DAYO,
-- 結合する要素内にNULLがある場合。
-- 下記の結果は『ちさとたきな』。
-- (どれか一つにNULLがあったとしても結合結果がNULLにはならない)
'ちさと' || NULL || 'たきな' AS NULL_ARUYO,
-- 文字列以外の数字や日付型を結合した時。
-- 下記の結果は『999と23-02-04』。
-- (2023年02月04日に実行した場合)
999||'と'||SYSDATE AS ANOTHER_DAYO
FROM テーブル名
連結演算子(||)のまとめ
- CONCAT()に比べて、3つ以上の文字列を結合する時にSQLが煩雑にならない。
(これが連結演算子をおススメする理由) - どれか一つにNULLがあったとしても、結合結果がNULLにはならない。
- 数字や日付の型を結合しても例外にならない。
やり方(CONCAT関数を使う)
動作確認用SQL
SELECT
-- 2カラム結合。
CONCAT(カラム名1, カラム名2) AS TWO_DAYO,
-- 3カラム結合。
-- 引数を2つしか渡せないので入れ子にする必要がある。
CONCAT(カラム名1, CONCAT(カラム名2, カラム名3)) AS THREE_DAYO,
-- 結合する要素内にNULLがある場合。
-- 下記の結果は『ちさとたきな』。
-- (どれか一つにNULLがあったとしても結合結果がNULLにはならない)
CONCAT('ちさと', CONCAT(NULL, 'たきな')) AS NULL_ARUYO,
-- 文字列以外の数字や日付型を結合した時。
-- 下記の結果は『999と23-02-04』。
-- (2023年02月04日に実行した場合)
CONCAT(999, CONCAT('と', SYSDATE)) AS ANOTHER_DAYO
FROM テーブル名
CONCAT()に3つ以上の引数を渡すと下記文言で例外。
ORA-00909: 引数の個数が無効です
CONCAT関数のまとめ
- 3つ以上の文字列を結合する時にSQLが煩雑になる。(入れ子)
- どれか一つにNULLがあったとしても、結合結果がNULLにはならない。
- 数字や日付の型を結合しても例外にならない。
バージョン
Oracle Database 11g Release 11.2.0.1.0 - 64bit Production