質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
BigQuery

BigQueryは、Google Cloud Platformが提供しているビッグデータ解析サービス。数TB(テラバイト)またはPB(ペタバイト)の膨大なデータに対し、SQL風のクエリを実行し、高速で集計・分析を行うサービスです。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Q&A

解決済

3回答

6347閲覧

SQLでカラム内の「英語表記」を「日本語表記」に一括変換したい(現状はREPLACEを使用)

SatoshiMaruyama

総合スコア16

BigQuery

BigQueryは、Google Cloud Platformが提供しているビッグデータ解析サービス。数TB(テラバイト)またはPB(ペタバイト)の膨大なデータに対し、SQL風のクエリを実行し、高速で集計・分析を行うサービスです。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

0グッド

0クリップ

投稿2018/02/28 00:54

編集2018/03/06 01:53

SQLで、カラム内の「英語表記」を「日本語表記」に一括変換したいと思います。
例)
English1→日本語1
English2→日本語2

SQL

1REPLACE( Var, 'English1', '日本語1')

現状、以下のようなネスト構造で記述しています。

SQL

1REPLACE( REPLACE( REPLACE( REPLACE( REPLACE( REPLACE( REPLACE( REPLACE( REPLACE( REPLACE( Var, 'English1', '日本語1'), 'English2', '日本語2'), 'English3', '日本語3'), 'English4', '日本語4'), 'English5', '日本語5'), 'English6', '日本語6'), 'English7', '日本語7'), 'English8', '日本語8'), 'English9', '日本語9'), 'English10', '日本語10')

しかし、

English100→日本語100

のように追加・変更等が発生した場合、アナログで記述対応となってしまいます。

一般的に、上記のような場合、どのような処理をするものでしょうか?

今回の場合、ページ内の「検索パラメーター」部分を「English*」として抽出し、
上記の「REPLACE」を「ネスト化」させることで「日本語」に一括変換しております。

よろしくお願いします。

【追記】
今回、ネストされた(ARRAY:配列内の)文字を置換したいのですが、
単純にUNNESTした場合、レコードの重複が発生してしまいます。

フローとして、

1.SPLITでページパス内の「検索パラメーター部分」(複数ある場合も有り)を、
1レコード内にネスト化して格納。
2.その「検索パラメーター部分」を置換処理「英語」→「日本語」
3.さらに「日本語」で並び替え処理
4.ネスト内のすべてをARRAY_TO_STRINGで「,」区切りとして1レコードに格納
→結果、ネスト構造は解消(無くなる)

*上記で、「ネスト内の置換・並び替え処理」ができる方法は御座いますでしょうか?

すみませんが、よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

Oracle,SQLServer,PostgreSQL,MariaDBならば正規表現をつかった置き換えが可能なようです。

REGEXP_REPLACE(var,"English(\d.*)","日本語\1")

MySQLだと、mysql-udf-regexpのようなユーザ定義関数で実現できそうです。
製品によって多少の方言はあるかもしれません。

投稿2018/02/28 01:15

rogueref

総合スコア727

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

SatoshiMaruyama

2018/03/12 01:38

こちらもありがとうございます。BigQueryもユーザ定義関数(UDF)がありますので、チャレンジしたかったのですが、JS記述の為、少々、スキル的に時間的に難しかった次第です。ありがとうございます。
guest

0

ベストアンサー

1文字の変換ならTRANSLATEが効率的ですが、単語を変換するなら、REPLACE系しか無いですね。

自動化ということなら、変換パターンをテーブル化しておき、そのテーブルからSQL文を生成するストアドとすることでしょうか。

投稿2018/02/28 03:42

sazi

総合スコア25173

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

SatoshiMaruyama

2018/03/12 01:34

ありがとうございました。変換パターンをBigQueryにテーブル化して、そこに「インデックス」を持たせて、再度、呼び戻す(日本語に変換する)という対応をしました。「ストアド」について調べましたが、少々、難しそうですね。。次回、チャレンジしてみたいと思います。
guest

0

一般的に、上記のような場合、どのような処理をするものでしょうか?

そもそも、翻訳をSQLで行うこと自体が一般的ではないと思いますが・・・
CASE式で対応できないでしょうか。

投稿2018/02/28 01:26

momon-ga

総合スコア4820

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

momon-ga

2018/02/28 01:28

おっと、カラムの一部を変換したいのですよね。CASEは無理でした。
SatoshiMaruyama

2018/03/12 01:37

回答ありがとうございました。CASE文では、その後の追加等、変更対応時にメンテナンスが煩雑になり、直接、SQLで記述する範囲を最小限に抑えたかった次第です。参考になりました。ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問