2017-11-01 27 views
2

私はBig Queryのテーブルを持っていて、いくつかのフィールドは日付の配列です(Date Repeatedタイプ)。私はそれらを文字列に変換する必要があります。文字列フィールドの配列のために私は以下のようにそれをやって、それが正常に動作します:BigQuery - 日付の配列を文字列に変換する

ARRAY_TO_STRING(national_id, "|", "") AS national_id 

しかし、フィールドは - 私は、エラーの下になった日付の配列であるとき。

No matching signature for function ARRAY_TO_STRING for argument types: ARRAY, STRING, STRING. Supported signatures: ARRAY_TO_STRING(ARRAY, STRING, [STRING]); ARRAY_TO_STRING(ARRAY, BYTES, [BYTES]) at [41:1]

私はまた、以下のように日付を文字列にキャストしてみました:

ARRAY_TO_STRING(cast(natural_person_date_of_birth_list as string), "|", "") AS natural_person_date_of_birth_list, 

しかし - 私は、エラーの下になって:

Invalid cast from ARRAY to STRING at [41:22].

誰もがこの問題で私を助けることができますか?

はあなたがunnest()を使用してこれを行うことができ、非常に

+0

あなたが低い率を持つようになります。 SOの重要な点 - 投稿された回答の左側のチェックボックスの下にあるチェックマークを使用して、「受け入れられた回答をマークする」ことができます。重要な理由については、http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work#5235を参照してください。答えに投票することも重要です。役に立った答えを投票してください。 ...誰かがあなたの質問に答えるときに何をすべきかを調べることができます - http://stackoverflow.com/help/someone-answers。これらの単純なルールに従えば、あなた自身の評判スコアを上げると同時に、私たちはあなたの質問に答えるために動機づけることができます:o)考慮してください! –

答えて

0

ありがとう:

select string_agg(cast(dte as string), '|') 
FROM (select [date('2017-01-01'), date('2018-01-01')] as aofd 
    ) d, 
    unnest(aofd) as dte 
1

あなたは文字列に日付を変換するために選択リストでサブクエリを使用することができます。たとえば、

このアプローチの利点は、必要なようにすべての行の文字列を取得することです。

0

下記の2つのオプションを参照してください。下記のどちらBigQueryの標準SQLのための

#standardSQL 
SELECT 
    REPLACE(REGEXP_REPLACE(TO_JSON_STRING(natural_person_date_of_birth_list), r'\[|\]|"', ''), ',', '|') dates_string_1, 
    (SELECT STRING_AGG(FORMAT_DATE('%Y-%m-%d', d), "|") 
    FROM UNNEST(natural_person_date_of_birth_list) d) AS dates_string_2 
FROM `project.dataset.table` 

ちょうどあなたの簡単なテストのためのものであり、それで遊ぶ:

#standardSQL 
WITH `project.dataset.table` AS (
    SELECT [CURRENT_DATE(), DATE '2011-10-15'] natural_person_date_of_birth_list 
) 
SELECT 
    REPLACE(REGEXP_REPLACE(TO_JSON_STRING(natural_person_date_of_birth_list), r'\[|\]|"', ''), ',', '|') dates_string_1, 
    (SELECT STRING_AGG(FORMAT_DATE('%Y-%m-%d', d), "|") 
    FROM UNNEST(natural_person_date_of_birth_list) d) AS dates_string_2 
FROM `project.dataset.table` 

両方のオプションは、私が期待されていると考えているものを返す:

dates_string_1   dates_string_2 
2017-11-01|2011-10-15 2017-11-01|2011-10-15  

注意:2番目のオプションの利点は、リスト内の日付の順序を制御できることです。例えば、

ここ
#standardSQL 
WITH `project.dataset.table` AS (
    SELECT [CURRENT_DATE(), DATE '2011-10-15'] natural_person_date_of_birth_list 
) 
SELECT 
    REPLACE(REGEXP_REPLACE(TO_JSON_STRING(natural_person_date_of_birth_list), r'\[|\]|"', ''), ',', '|') dates_string_1, 
    (SELECT STRING_AGG(FORMAT_DATE('%Y-%m-%d', d), "|" ORDER BY d) 
    FROM UNNEST(natural_person_date_of_birth_list) d 
) AS dates_string_2 
FROM `project.dataset.table` 

出力は(dates_string_2でノートの変更)

dates_string_1   dates_string_2 
2017-11-01|2011-10-15 2011-10-15|2017-11-01  
関連する問題