3

Big Query では非常に複雑になった非常に単純なことをしようとしています。人の名前などを適切な大文字(各単語の最初の文字を大文字)に変換したい。

ここに私が現在取り組んでいるクエリがありますが、ほとんどうまくいきます!

SELECT 
REGEXP_REPLACE(
    CONCAT(
        UPPER(LEFT('tESt ing', 1)), 
        LOWER(SUBSTR('tESt ing', 2))
    ),
    ' ([a-z])', 
    UPPER(' \\1')
);

#outputs: Test ing
#desired output: Test Ing

何らかの理由で、キャプチャされたグループが UPPER によって処理されません。他のテキストを入れると、すべて大文字になりますが、キャップ グループ変数は小文字のままです。

これについては、どんな助けでも大歓迎です。これが期待どおりに機能しないのは奇妙に思えます (操作の順序の問題かもしれません...)。とにかく、事前に感謝します。

エリック

4

4 に答える 4

0

拡張性に優れた別の方法 - 1,500 万のレコード名のデータセットでテストできますか?

SELECT capitalized_name, x, id FROM (
SELECT GROUP_CONCAT(capw, ' ')  OVER(PARTITION BY id ORDER BY pos) capitalized_name, x, id, ROW_NUMBER() OVER(PARTITION BY id ORDER BY pos DESC) rn
FROM (
  SELECT UPPER(LEFT(w, 1)) + LOWER(SUBSTR(w, 2)) capw, x, POSITION(w) pos, id
  FROM (
    SELECT SPLIT(rdf_schema_label, ' ') w, rdf_schema_label x, URI id
    FROM [dbpedia2014temp.Person]
  )
  ORDER BY pos
)
) WHERE rn=1
于 2015-01-27T08:03:48.430 に答える