Несмотря на то, что вы опубликовали работу по вашей проблеме. Я считаю, что этот ответ будет информативным. Вы упомянули, что один из ответов был выбран больше, чем вам нужно, я написал запрос ниже, чтобы воспроизвести ваш случай и добиться намеченного результата.
WITH
data AS (
SELECT
" [{ \"location\":[22.99902,66.000]\"t\":1},{\"location\":[55.32168,140.556],\"t\":2},{\"location\":[85.0002,20.0055],\"t\":3}] " AS string_j
UNION ALL
SELECT
" [{ \"location\":[22.99902,66.000]\"t\":1},{\"location\":[55.32168,140.556],\"t\":3},{\"location\":[85.0002,20.0055],\"t\":3}] " AS string_j
UNION ALL
SELECT
" [{ \"location\":[22.99902,66.000]\"t\":1},{\"location\":[55.32168,140.556],\"t\":3},{\"location\":[85.0002,20.0055],\"t\":3}] " AS string_j
UNION ALL
SELECT
" [{ \"location\":[22.99902,66.000]\"t\":1},{\"location\":[55.32168,140.556],\"t\":3},{\"location\":[85.0002,20.0055],\"t\":3}] " AS string_j ),
refined_data AS (
SELECT
REGEXP_EXTRACT(string_j, r"\{\"\w*\"\:\[\d*\.\d*\,\d*\.\d*\]\,\"t\"\:2\}") AS desired_field
FROM
data )
SELECT
*
FROM
refined_data
WHERE
desired_field IS NOT NULL
Обратите внимание, что я использовал манекен, описанный в временной таблице, заполняется внутри WITH метода. Как показано ниже:
Afterwords, в таблице refined_data я использовал REGEXP_EXTRACT для извлечения желаемая строка из столбца. Обратите внимание, что для строк, для которых нет выражения совпадения, выдается null . Таким образом, таблица refined_data выглядит следующим образом:
Как видите, сейчас просто нужно просто WHERE фильтр для получения желаемого результата, который был сделан при последнем выборе.
Кроме того, вы можете увидеть информацию о предоставленном мною выражении здесь .
Надеюсь, это поможет.