【问题标题】:Splitting value in database in WHERE clause在 WHERE 子句中拆分数据库中的值
【发布时间】:2022-01-14 05:03:04
【问题描述】:

我正在查询 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 ???

有人可以帮忙吗?我查看了SPLITSUBSTRING,但似乎无法正确查询。

【问题讨论】:

  • 您是否尝试过使用LIKE 运算符?

标签: sql database google-bigquery


【解决方案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_')       
    

    如果应用于您问题中的样本数据 - 两者都有以下输出

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-10-18
      • 2013-07-13
      • 1970-01-01
      • 2021-01-16
      • 1970-01-01
      • 2015-04-19
      • 1970-01-01
      相关资源
      最近更新 更多