今回の課題
SQLで文字列を分解していたところ、
余計な空白が入ってしまった。
余計な空白を除くために、TRIM関数を使用してみた。
TRIM関数とは
トリミングする STRING 値または BYTES 値を取ります。
トリミングする値が STRING の場合、この値から set_of_characters_to_remove の先頭と末尾の Unicode コードポイントをすべて削除します。コードポイントのセットは省略可能です。指定しない場合、トリミングする値の先頭と末尾からすべての空白文字が削除されます。
トリミングする値が BYTES の場合、この値から set_of_characters_to_remove の先頭と末尾のバイトをすべて削除します。バイトのセットは必須です。
--https://cloud.google.com/bigquery/docs/reference/standard-sql/string_functions#trim
つまり、指定した文字列の、先頭と末尾のUnicodeコードポイントを除去できる関数。
Unicodeコードポイントを指定しなければ、空白が除去される。
具体例
文字列の前後に空白が入る失敗例
1)下記のテーブルを用意する
contents_title | page_title |
---|---|
ドラゴンボールZ | ドラゴンボールZ 1話 |
ドラゴンボールZ | ドラゴンボールZ 2話 |
ドラゴンボールZ | ドラゴンボールZ 3話 |
2)上記のテーブルに下記のクエリを使用して、話数を別カラムに抽出する
select
contents_title
, page_title
, replace(page_title, contents_title, "") as episode_number --話数を別カラムで抽出
from
`テーブル名`
episode_numberの文字列の前に、全角の空白が入ってしまった状態の下記のデータが出力される。
contents_title | page_title | episode_number |
---|---|---|
ドラゴンボールZ | ドラゴンボールZ 1話 | (全角スペース)1話 |
ドラゴンボールZ | ドラゴンボールZ 2話 | (全角スペース)2話 |
ドラゴンボールZ | ドラゴンボールZ 3話 | (全角スペース)3話 |
空白を除く方法
1)下記のテーブルを用意する
contents_title | page_title |
---|---|
ドラゴンボールZ | ドラゴンボールZ 1話 |
ドラゴンボールZ | ドラゴンボールZ 2話 |
ドラゴンボールZ | ドラゴンボールZ 3話 |
2)上記のテーブルにTRIM関数を組み込んだ、下記のクエリを実行する
select
contents_title
, page_title
, trirm(replace(page_title, contents_title, "")) as episode_number --話数を別カラムで抽出
from
`テーブル名`
結果、episode_numberの文字列の前の空白を除去することができた。
contents_title | page_title | episode_number |
---|---|---|
ドラゴンボールZ | ドラゴンボールZ 1話 | 1話 |
ドラゴンボールZ | ドラゴンボールZ 2話 | 2話 |
ドラゴンボールZ | ドラゴンボールZ 3話 | 3話 |
以上で今回の課題を解決することができた。