我有一张包含
name
和 full name
列的表格,并且有兴趣知道其中一个是否是另一个的一部分(但它们不相等)。name | full name | is_subset
-------------------------------------------
john smith | john smith | false
john smith | john h. smith | true
john smith | alice jones | false
我找到了一种使用
SPLIT
和数组交集的方法,但很好奇是否有更简单或更有效的方法。
SELECT
name,
full name,
CARDINALITY(
(
ARRAY_INTERSECT(
SPLIT(name, ' '),
SPLIT(full name, ' ')
)
)
) = CARDINALITY(SPLIT(name, ' ')) AND CARDINALITY(
SPLIT(full name, ' ')
) > CARDINALITY(SPLIT(name, ' ')) AS is_subset
from t
ARRAY_EXCEPT(
SPLIT(name, ' '),
SPLIT(fullname, ' ')
)
=
ARRAY []
AND
ARRAY_EXCEPT(
SPLIT(fullname, ' '),
SPLIT(name, ' ')
)
!=
ARRAY []
第二个条件可能可以简化为...
AND
LEN(name) < LEN(fullname)