concat_ws()とconcat()の違い。SQL超初心者の勉強

文字結合でconcat()を使用したのですが、昔のメモを見ていたらconcat_ws()を使っていました。昔の自分は使い分けていたのに今の自分はさっぱり。悔しいのでconcat_ws()とconcat()の違いを調べ直してみました。

動作環境

SQL FIDDLEでMySQL5.6、PostgreSQL9.6で動作確認しています。

concat()とは

concat()はカッコ内全ての引数を結合します。
※ただしNULLは無視される。

書き方例

concat('100日後', 'に' , '死ぬワニ')

結果 : 100日後に死ぬワニ

concat_ws()とは

concat_ws()は第一引数を区切り文字とし、残りのすべての引数を結合します。
※ただしNULLは無視される。

書き方例

concat_ws(' ', '100日後', 'に' , '死ぬワニ')

※第一引数に半角スペースを入れました。

結果 : 100日後 に 死ぬワニ

実際に使ってみよう!

確認もかねて実際に書いて結果を取得してみます。

準備

以下のテーブルを使用し解説します。

itemidtittleepisode
1アンナチュラル第1話
2アンナチュラル第2話
3アンナチュラル第3話
4アンナチュラル(null)

テーブルを作成するコードです。

-- CREATE文
CREATE TABLE item (
ItemID numeric(8, 0) unique not null,
Tittle character varying (20) not null,
episode character varying (20),
primary key(ItemID)
);
-- INSERT文
insert into item
values(0001, 'アンナチュラル', '第1話'),
(0002, 'アンナチュラル', '第2話'),
(0003, 'アンナチュラル', '第3話'),
(0004, 'アンナチュラル', null)

concat()のサンプルコード

SELECT
concat(itemID, ' : ', Tittle, episode, 'です。') as 結果
FROM
item

■ 結果

結果
1 : アンナチュラル第1話です。
2 : アンナチュラル第2話です。
3 : アンナチュラル第3話です。
4 : アンナチュラルです。

文章を作る時などに便利です。

concat_ws()のサンプルコード

SELECT
concat_ws(', ' , itemID, Tittle, episode) as 結果
FROM
item

■ 結果

結果
1, アンナチュラル, 第1話
2, アンナチュラル, 第2話
3, アンナチュラル, 第3話
4, アンナチュラル

SVCファイル形式にする時など便利そうです。