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:LIKEで文字列を絞り込む|%と_の違いと先頭・末尾の指定

0
Posted at

今回はPostgreSQLのLIKEを使い、都市名の文字列パターンで施設を絞り込みます。取得したデータの意味を整理します。

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

今日のテーマと到達目標

LIKEで文字列の条件を書き、%と_の違いを説明できることが目標です。

用語の定義

用語・記号 意味
パターン 文字列がどのような形かを指定するもの
LIKE 文字列が指定したパターンに一致するかを判定する
% 0文字以上の任意の文字列を表す
_ 任意の1文字を表す

LIKEは文字列全体がパターンに一致するかを判定します。途中に特定の文字列を含む条件にしたい場合は、前後に%を付けます。

条件 意味
city LIKE 'Shi%' Shiで始まる都市名
city LIKE '%ku' kuで終わる都市名
city LIKE '%yo%' yoを含む都市名

今回は英字の大文字・小文字をデータに合わせて指定しています。

使用するTableと列

取得元はmobility.poisです。1行は1施設を表します。

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

Shiで始まる都市の施設を取得する

実際に実行したSQLは次のとおりです。

SELECT poi_id, poi_name
FROM mobility.pois
WHERE city LIKE 'Shi%'
ORDER BY poi_id;

結果は16行でした。取得された施設IDは次のとおりです。

2, 3, 10, 11, 18, 19, 26, 27,
34, 35, 42, 43, 50, 51, 58, 59

最初の課題ではcity列の表示も指定されていましたが、実際のSELECTでは施設IDと施設名の2列を取得しました。WHEREではcityを条件に使えており、表示する列と条件判定に使う列は別に指定できることを確認しました。

「ShinjukuとShibuyaはそれぞれ一致するか」という質問には、「一致しています」と回答しました。どちらもShiで始まるためです。

kuで終わる都市の施設を取得する

次は、自分で末尾のパターンを指定しました。今回は都市の列も表示しています。

SELECT poi_id, poi_name, city
FROM mobility.pois
WHERE city LIKE '%ku'
ORDER BY poi_id;

実行結果は次の8行でした。

poi_id poi_name city
2 Shinjuku_shopping_002 Shinjuku
10 Shinjuku_shopping_010 Shinjuku
18 Shinjuku_shopping_018 Shinjuku
26 Shinjuku_shopping_026 Shinjuku
34 Shinjuku_shopping_034 Shinjuku
42 Shinjuku_shopping_042 Shinjuku
50 Shinjuku_shopping_050 Shinjuku
58 Shinjuku_shopping_058 Shinjuku

今回のデータでは、kuで終わる都市名はShinjukuでした。同じ都市にある複数の施設が、それぞれ1行ずつ返っています。

%と_の違いを確認する

最後に、文字列Tokyoが次のパターンに一致するかを、実行せずに回答しました。

パターン 回答 理由
T% 一致する Tの後ろのokyoを%が表せる
T____ 一致する Tの後ろに4文字あり、_4個が対応する
T_ 一致しない _1個ではTの後ろの4文字に対応できない

3問とも正解でした。T_はTと任意の1文字からなる2文字の文字列に一致するパターンです。Tokyoの先頭2文字だけを見て一致と判定するわけではありません。

これらは確認問題への回答であり、今回SQLで実行した結果ではありません。また、%yo%は書き方の例として説明したもので、実行画面では確認していません。

合格条件と学習記録

確認項目 確認できた内容
先頭のパターンを指定できる Shi%で16施設を取得
末尾のパターンを自分で書ける %kuでShinjukuの8施設を取得
%と_の文字数の違いを説明できる Tokyoに対する3問に正解

共有されたSQLはエラーなく実行できました。

まとめ

LIKEでは、%が0文字以上、_が1文字を表します。記号の位置と個数によって一致する文字列が変わるため、先頭・末尾・文字数のどれを指定したいか整理して書きます。

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?