我想就我的问题提供一些专业建议。
您看到我们的数据库正在使用ETL来检索海量数据。这些数据中的一些或大部分是汇总的。
问题是我需要根据选定的电台检索数据
例如。我选择了Sub test()
Dim xhr As MSXML2.XMLHTTP60
Dim doc As MSHTML.HTMLDocument
Dim results As MSHTML.HTMLDivElement
Dim elt As MSHTML.HTMLTableCell
Dim imgs As MSHTML.IHTMLElementCollection
Dim img As MSHTML.HTMLImg
Set xhr = New MSXML2.XMLHTTP60
With xhr
.Open "GET", "https://api.restb.ai/segmentation client_key=c529e4cb36fd71a0038e5790fd69a42eacaf378fa0789bba78b9782e073b88ed&model_id=re_features&image_url=https://www.mulderteam.com/wp-content/blogs.dir/234/files/2013/04/110922317.jpg", False
.send
If .readyState = 4 And .Status = 200 Then
Set doc = New MSHTML.HTMLDocument
doc.body.innerHTML = .responseText
End If
End With
End Sub
。
现在,在聚合列中,我们有以下数组:
MNL
现在,根据我选择的代码(MNL),我应该只能从数组中选择以下元素。
{MNL-CEB,CEB-MNL,DVO-MNL,MNL-DVO,DVO-CEB,CEB-DVO}
我一直在尝试各种条件但没有成功。希望你们能帮助我。谢谢!
这是我在下面使用过的一段代码 -
MNL-CEB,
CEB-MNL,
DVO-MNL,
MNL-DVO
数据太大而不适合,导致脚本加载更多。
修改 - 我还使用了超过1个电台代码。例如
select distinct
unnest(fpd.segment_agg) segments
from daylightreport.f_dailysales_agg fpd
或类似的东西。
提前致谢!
答案 0 :(得分:0)
避免被取消的一种方法是将数组转换为字符串,然后对该字符串进行正则表达式匹配:
select *
from daylightreport.f_dailysales_agg fpd
where array_to_string(fpd.segment_agg, ',') ~ '(-){0,1}(MNL)(-){0,1}';
正则表达式确保搜索字符串不会显示为另一个字符串的一部分。如果这种情况无论如何都不会发生,那么一个简单的事情也可能会发生。这也假设数据从不包含,
这不虽然快,但避免了多行中的取消。
另一个选项(尽管可能不是那么快)是编写一个遍历数组元素并使用LIKE运算符的函数:
create or replace function any_element_like(p_elements text[], p_pattern text)
returns boolean
as
$$
declare
l_word text;
begin
foreach l_word in array p_elements
loop
if l_word like p_pattern then
return true;
end if;
end loop;
return false;
end;
$$
language plpgsql;
可以这样使用:
select *
from daylightreport.f_dailysales_agg fpd
where any_element_like(fpd.segment_agg, '%MNL%');