我在google big query中看到了REGEXP_MATCH
函数非常奇怪的行为。该函数似乎对公共数据完全正常,但不适用于我的数据集。我有一个从csv导入的数据集,前两行(首先是标题行,它们都变成了一切都是字符串的模式),还有更多,但以下是这种情况下唯一的相关数据。
"id","common_name","botanical_name","low_hardiness_zone","high_hardiness_zone","type","exposure_min","exposure_max","moisture_min","moisture_max"
"plant1","Abelia","Abelia zanderi 'Conti (Confetti)'","5b","9a","Shrub","Partial Sun","Full Sun","Dry","Dry"
当我运行查询时:
SELECT * FROM [PlantLink_Plant_Types.plant_data_set]
WHERE REGEXP_MATCH('common_name',r'.*')
我得到了每一个结果。
但是,当我运行查询时:
SELECT * FROM [PlantLink_Plant_Types.plant_data_set]
WHERE REGEXP_MATCH('common_name',r'A.*')
我没有得到任何结果,这真的很奇怪,因为工厂的通用名称Abelia以A开头。
现在我的正则表达式魔法并不那么强大,但我很确定这种模式没有错。另外,我使用REGEXP_MATCH
运行公共数据集测试查询,并且它们正确运行。有没有人知道为什么REGEXP_MATCH
并不总是像宣传的那样发挥作用?
答案 0 :(得分:2)
问题是字符串'common_name'不以'A'开头。
检查一下:
REGEXP_MATCH('common_name',r'.*')
:所有结果。REGEXP_MATCH('common_name',r'A.*')
:没有结果。REGEXP_MATCH('common_name',r'c.*')
:所有结果。REGEXP_MATCH(common_name,r'A.*')
:所有结果都有“A”。:)
答案 1 :(得分:2)
注意:
而
第一个总是如此,因此你得到了所有结果。 我想你想要引用该字段的内容,所以你需要使用第二个。
希望这会有所帮助。