2017-01-18 11 views
1

文字列をSQL内のタイムスタンプに変換しようとしています。質問は本当に簡単ですが、この文字列をその日の真夜中に始まるタイムスタンプに変換するにはどうすればよいですか?yyyymmddをBigQueryのタイムスタンプに変換しますか?

私のデータベース内には、timestamp_microsのいずれかのフィールドが格納されています。これらのいずれかが動作する可能性があります。タイムスタンプに変換すると、文字列よりも簡単になります。例えば

20170118 => timestamp

問合せ:

WITH allTables as (
    SELECT 
     event.date as date, 
     count(*) as totalSessions, 
     count(DISTINCT user_dim.app_info.app_instance_id) as uniqueUsers 
    FROM `namehiddenonlyhere.*` 
    CROSS JOIN 
     UNNEST(event_dim) AS event 
    WHERE 
     event.name = 'session_start' 
    AND 
     event.date <= FORMAT_DATE('%Y%m%d', DATE_SUB(CURRENT_DATE, INTERVAL 1 DAY)) 
    AND 
     event.date >= FORMAT_DATE('%Y%m%d', DATE_SUB(CURRENT_DATE, INTERVAL 7 DAY)) 
    GROUP BY event.date 

    UNION ALL 
    SELECT 
     event.date as date, 
     count(*) as totalSessions, 
     count(DISTINCT user_dim.app_info.app_instance_id) as uniqueUsers 
    FROM `namehiddenonlyhere.*` 
    CROSS JOIN 
     UNNEST(event_dim) AS event 
    WHERE 
     event.name = 'session_start' 
    AND 
     event.date <= FORMAT_DATE('%Y%m%d', DATE_SUB(CURRENT_DATE, INTERVAL 1 DAY)) 
    AND 
     event.date >= FORMAT_DATE('%Y%m%d', DATE_SUB(CURRENT_DATE, INTERVAL 7 DAY)) 
    GROUP BY event.date 
) SELECT 'all apps' as target, date as datapoint_time, totalSessions datapoint_value FROM allTables; 
+1

'STR_TO_DATE()'関数はあなたが望むことをしませんか? – Barmar

+1

MySQLのドキュメントには、日付と時刻に関連するすべての機能をリストしたページがあります。確かにそこの答えを見つけられたかもしれません。 http://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html – Barmar

+0

@Barmar確かに私はこれをまだ探せずに結果が見つからないかどうか尋ねていません。 –

答えて

2

あなたは、日付またはタイムスタンプを取得するには(フォーマット文字列が同じになります)PARSE_DATEまたはPARSE_TIMESTAMPを使用することができます。例:

SELECT 
    d, 
    PARSE_DATE('%Y%m%d', d) AS date, 
    PARSE_TIMESTAMP('%Y%m%d', d) AS timestamp 
FROM UNNEST(['20170117', '20161231']) AS d; 

ドキュメントでは、書式文字列の詳細を読むことができます。 datetimestampのセクションがあり、それぞれPARSE_DATEPARSE_TIMESTAMPに適用されます。

編集:あなたの更新質問から、あなたはこのような何かにあなたのクエリを変更することができます:

WITH allTables as (
    SELECT 
     event.date as date, 
     count(*) as totalSessions, 
     count(DISTINCT user_dim.app_info.app_instance_id) as uniqueUsers 
    FROM `namehiddenonlyhere.*` 
    CROSS JOIN 
     UNNEST(event_dim) AS event 
    WHERE 
     event.name = 'session_start' 
    AND 
     event.date <= FORMAT_DATE('%Y%m%d', DATE_SUB(CURRENT_DATE, INTERVAL 1 DAY)) 
    AND 
     event.date >= FORMAT_DATE('%Y%m%d', DATE_SUB(CURRENT_DATE, INTERVAL 7 DAY)) 
    GROUP BY event.date 

    UNION ALL 
    SELECT 
     event.date as date, 
     count(*) as totalSessions, 
     count(DISTINCT user_dim.app_info.app_instance_id) as uniqueUsers 
    FROM `namehiddenonlyhere.*` 
    CROSS JOIN 
     UNNEST(event_dim) AS event 
    WHERE 
     event.name = 'session_start' 
    AND 
     event.date <= FORMAT_DATE('%Y%m%d', DATE_SUB(CURRENT_DATE, INTERVAL 1 DAY)) 
    AND 
     event.date >= FORMAT_DATE('%Y%m%d', DATE_SUB(CURRENT_DATE, INTERVAL 7 DAY)) 
    GROUP BY event.date 
) SELECT 'all apps' as target, PARSE_DATE('%Y%m%d', date) as datapoint_time, totalSessions datapoint_value FROM allTables; 

私が作った唯一の変更は、変更した:

date AS datapoint_time 

へ:

PARSE_DATE('%Y%m%d', date) as datapoint_time 
+0

それは動作するように見えますが、部分的にしか見えません。すでに存在する 'SELECT ... FROM'クエリにどのように実装するのですか? –

+0

'd'ではなくテーブルから列の名前を渡すだけです。上記の例では、 'FROM UNNEST(...)'を使用して2行のテーブルを持つようにシミュレートしました。たぶん、実行しようとしているクエリを上記の質問の一部として提供することができますか? –

+0

更新された質問をご覧ください。 –

-2

あなたがこの表現を使用しようとしましたか?

SELECT CONVERT(DATETIME,'20170118') 
+0

BigQueryでは提供されていません。 –

関連する問題