8
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?

More than 1 year has passed since last update.

ZOZOAdvent Calendar 2021

Day 2

BigQueryでどこかしらの列に含まれる文字列を見つける方法

Last updated at Posted at 2021-12-02

とある1つの文字列型の列に特定の文字列が含まれている行を抽出する場合、以下のSQLで実現できます。

SELECT * FROM <テーブル名> WHERE col1 LIKE "%検索したい文字列%"

それでは、検索対象の列がテーブルの全てになった場合はどうすればよいでしょうか?
愚直に書くならこのようなSQLになりますが、カラムの数が増えるとSQLを書くのが面倒になります。

SELECT * FROM <テーブル名> WHERE col1 LIKE "%検索したい文字列%" OR col2 LIKE "%検索したい文字列%" OR ...

解決策

CONTAINS_SUBSTR 関数を使う。

この関数は通常は以下のように文字列を2つ渡して、第一引数の文字列の中に第二引数の文字列が含まれているかどうかを判断するものです。

SELECT CONTAINS_SUBSTR('hoge fuga piyo', 'fuga') AS result;
# -> TRUE

しかし、この関数の第一引数にはテーブルを渡すこともできます。
その場合はそのテーブルの全ての列に対して検索を行い、どこかしらの列に検索対象の文字列が含まれた場合にTRUEを返します。
そのため、以下のSQLで 「どこかしらの列」に含まれる文字列を見つけることができます。

SELECT * FROM <テーブル名> WHERE CONTAINS_SUBSTR(<テーブル名>, "検索したい文字列")
8
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
8
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?