0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

PostgreSQL:文字列を連結する|空白・括弧の指定と元データの違い

0
Posted at

今回はPostgreSQLの文字列連結を使い、都市名と施設名をつなげて表示します。取得したデータの意味を整理します。

所要時間は15分ほどです。
それでは、さっそく始めていきましょう!

今日のテーマと到達目標

文字列を連結するSQLを自分で書き、取得結果と元のTableの値を区別できることが目標です。今回は文字列の操作のうち、連結を学習しました。

用語の定義

用語 意味
文字列 施設名や都市名など、文字の並びで表された値
文字列の連結 複数の文字列をつなげて1つの文字列にすること
文字列リテラル SQLに直接書く文字列。シングルクォートで囲む
連結演算子 PostgreSQLでは今回、縦棒2本の記号を使う

連結演算子は||です。例えば、'Tokyo' || ' / ' || 'station'は、Tokyo / stationという文字列を作る式です。

使用するTableと列

取得元はmobility.poisです。1行が1施設を表す、準備済みの学習用データです。

列名 意味
poi_id 施設を識別するID
poi_name 施設名
city 所在する都市

cityのように書くと列を指定します。一方、' / 'は半角スペース、スラッシュ、半角スペースという文字列そのものです。

都市名と施設名を連結する

SELECT
    poi_id,
    city,
    poi_name,
    city || ' / ' || poi_name AS facility_label
FROM mobility.pois
ORDER BY poi_id
LIMIT 5;

都市名、区切り文字、施設名の順につなげ、結果の列にfacility_labelという別名を付けます。

実行画面では5行が返り、連結結果は次のとおりでした。

poi_id facility_label
1 Tokyo / Tokyo_station_001
2 Shinjuku / Shinjuku_shopping_002
3 Shibuya / Shibuya_restaurant_003
4 Ikebukuro / Ikebukuro_cafe_004
5 Yokohama / Yokohama_office_005

自分で表示形式を変える

次は、施設名の後ろに都市名を括弧付きで表示するSQLを書きました。目標とする形式は次のとおりです。

Tokyo_station_001 (Tokyo)

最初は、次のように連結しました。

SELECT
    poi_id,
    poi_name || '(' || city || ')' AS facility_label
FROM mobility.pois
ORDER BY poi_id ASC
LIMIT 1;

SQLは実行できましたが、結果は次のようになりました。

Tokyo_station_001(Tokyo)

開き括弧の前の半角スペースが足りませんでした。

空白も文字列の一部として指定する

'('を' ('へ修正しました。シングルクォートの内側に半角スペースを入れます。

SELECT
    poi_id,
    poi_name || ' (' || city || ')' AS facility_label
FROM mobility.pois
ORDER BY poi_id ASC
LIMIT 1;

修正後の実行結果は次のとおりです。

 poi_id | facility_label
--------+---------------------------
      1 | Tokyo_station_001 (Tokyo)
(1 行)

式の中で列名や演算子の間を空けても、その空白が結果に追加されるわけではありません。表示したい空白は、今回のように文字列リテラルの中に含めます。

元の施設名や都市名は書き換わるのか

「このSELECTで元のpoi_nameやcityも書き換わるか」という質問には、「書き換わらない」と回答しました。

今回のSELECTは、保存されている値を使って連結結果を返します。元の施設名や都市名を更新する操作ではありません。

対象 施設IDが1の場合の値
元のpoi_name Tokyo_station_001
元のcity Tokyo
取得結果のfacility_label Tokyo_station_001 (Tokyo)

facility_labelは今回の取得結果の列名です。このSELECTによって元のTableに列が追加されるわけでもありません。

合格条件と学習記録

確認項目 確認できた内容
文字列を連結できる 都市名、区切り文字、施設名の連結結果を5行取得
表示形式を自分で指定できる 施設名の後ろに都市名を括弧付きで表示
空白を文字列として指定できる 開き括弧の前に半角スペースを加えて修正
元データと取得結果を区別できる 元の値は書き換わらないと回答

まとめ

文字列の連結には||を使い、固定の文字はシングルクォートで囲みます。空白や括弧も、表示したい文字として明示します。

SELECTで作った表示用の文字列と、元のTableに保存された値を分けて考えることが大切です。

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?