アクセス解析担当者のBigQuery日記

普段はアクセス解析やウェブ広告の運用をしています。主にBigQueryについて、記録していきます。

BigQueryで全角英数を半角英数に変換する

以下の流れで処理しています。

  1. TO_CODE_POINTS 関数を使って文字列をコードポイントの配列に変換します。
  2. コードポイント配列をUNNESTします。
  3. コードポイントが全角英数にマッチする場合、対応する半角英数のコードポイントになるようにずらします。
  4. コードポイントを配列にまとめ直し、CODE_POINTS_TO_STRING 関数を使って配列を文字列に戻します。

https://cloud.google.com/bigquery/docs/reference/standard-sql/functions-and-operators#to_code_points

クエリ

#StandardSQL
WITH
  sample AS (
  #サンプルデータを用意
  SELECT
    dat
  FROM
    UNNEST( ["ABCDEFGHIJKLMNOPQRSTUVWXYZ","ABCDEFGH1234","USA","29800円"] ) AS dat )

SELECT
  dat,
  CODE_POINTS_TO_STRING( ARRAY(
    SELECT
      CASE 
 # 全角大文字を半角大文字に変換
      WHEN  code_point_arr BETWEEN 65313 AND 65338 THEN code_point_arr-65248
 # 全角小文字を半角小文字に変換
      WHEN  code_point_arr BETWEEN 65345 AND 65370 THEN code_point_arr-65248
 # 全角数字を半角数字に変換
      WHEN  code_point_arr BETWEEN 65296 AND 65305 THEN code_point_arr-65248
       ELSE  code_point_arr END
    FROM
    #
    # TO_CODE_POINTS の引数に、半角変換を行いたい列を指定する
    #
      UNNEST( TO_CODE_POINTS(dat) )AS code_point_arr )) as formatted_dat
FROM
  sample

以上です。