Разделение значения в базе данных в предложении WHERE

# #sql #database #google-bigquery

#sql #База данных #google-bigquery

Вопрос:

Я запрашиваю таблицу BigQuery для извлечения строительных данных. Мы храним данные о здании в ячейке вместе с данными о местоположении и названии датчика. Строка здания имеет следующие значения, например

 GB-FRE-BB2003_MSU-01 GB-FRE-BB2001_MSU-12 GB-FRE-BB2003_MSU-12 GB-FRE-BB2012_MSU-12 GB-FRE-BB2003_MSU-10  etc  

Я хотел бы запросить данные, используя подстроку, чтобы я мог найти все данные из здания BD2003, независимо от местоположения и датчика.

 SELECT `presentvalue`  FROM `database`  WHERE ???  

Кто-нибудь может помочь с этим? Я посмотрел SPLIT и SUBSTRING , но, похоже, не могу правильно ответить на вопрос.

Комментарии:

1. Вы пробовали использовать LIKE оператора?

Ответ №1:

использовать where substring(split(val , '-')[offset(2)], 1, 6)='BB2003'

протестировал его на приведенном ниже коде, и он работает:

 create temp table sample( val string ); insert into sample (val) values  ('GB-FRE-BB2003_MSU-01'), ('GB-FRE-BB2001_MSU-12'), ('GB-FRE-BB2003_MSU-12'), ('GB-FRE-BB2012_MSU-12'), ('GB-FRE-BB2003_MSU-10');  select *, from sample where substring(split(val , '-')[offset(2)], 1, 6)='BB2003''  

Ответ №2:

Еще несколько вариантов

Используя, КАК

 select * from your_table where presentvalue like '%-BB2003_%'   

Использование REGEXP_CONTAINS

 select * from your_table where regexp_contains(presentvalue, '-BB2003_')   

если применить к образцам данных в вашем вопросе — оба имеют вывод ниже

введите описание изображения здесь