嘗試SPLIT
功能:
#standardSQL
WITH Input AS (
SELECT 'Assigned (03/01/2017 06:13:47 AM) -> Work In Progress (03/02/2017 05:27:52 AM) -> Resolved (04/06/2017 03:34:16 AM)' AS STATUS_TRAIL
)
SELECT
events[SAFE_OFFSET(0)] AS assigned_event,
events[SAFE_OFFSET(1)] AS progress_event,
events[SAFE_OFFSET(2)] AS resolved_event
FROM (
SELECT
SPLIT(STATUS_TRAIL, ' -> ') AS events
FROM Input
);
或者,就像看着你的數據的另一種方式,你可以把它建模爲一個數組事件類型和時間戳條目:
#standardSQL
WITH Input AS (
SELECT 'Assigned (03/01/2017 06:13:47 AM) -> Work In Progress (03/02/2017 05:27:52 AM) -> Resolved (04/06/2017 03:34:16 AM)' AS STATUS_TRAIL
)
SELECT
ARRAY(
SELECT AS STRUCT
parts[SAFE_OFFSET(0)] AS type,
PARSE_TIMESTAMP('%m/%d/%Y %T %p)', parts[SAFE_OFFSET(1)]) AS timestamp
FROM (
SELECT SPLIT(event_string, ' (') AS parts
FROM UNNEST(event_strings) AS event_string
)
) AS events
FROM (
SELECT SPLIT(STATUS_TRAIL, ' -> ') AS event_strings
FROM Input
);
在輸出的每一行看起來像:
[{Assigned, 2017-03-01 06:13:47+00},
{Work In Progress, 2017-03-02 05:27:52+00},
{Resolved, 2017-04-06 03:34:16+00}]
這個工作,這就是我想要的目的。米哈伊爾祝你有個愉快的一天。 –
你可能想接受答案並投票:o) –