在某些请求中有两个字符串是模式,这些模式在
“Like模式”对应于有限或无限的字符串集合。该集合中的每个字符串都与给定模式匹配。我想检查两个给定模式的字符串集合的交集是否为空。因此最好说模式的连接。用数学语言来说:
S-字符串集合 P-模式集合(其中每个模式都有一个或多个字符串表示) Si-子字符串集合(Si ⊂ S),其匹配pi模式(其中i可以是任何索引)。 等式形式:“Sᵢ = {s | s ∈ S, s matches pᵢ, pᵢ ∈ P}”即:“Sᵢ是字符串元素的集合,且与pᵢ模式匹配”。 另一种符号表示法:“Sᵢ ⊂ S,∀pᵢ ∈ P,∀s ∈ S(s matches pᵢ ≡ s ∈ Sᵢ)”,即:“Sᵢ是字符串的子集,如果它与pᵢ模式匹配,则任何字符串都是Sᵢ的元素”。
让我们定义模式的连接:“p₁ ∧ p₂ = p₃ ≡ S₁ ∩ S₂ = S₃”,这意味着:“与模式p₁和p₂的连接匹配的字符串集合是匹配p₁模式的字符串集合和匹配p₂模式的字符串集合的交集”。
例如: ab_d和%cd-相交 k%n和kl___-相交
LIKE
表达式中使用(带有_
和%
占位符)。我想找出这些模式是否相交(是否有一些字符串与它们都匹配)。有没有办法做到这一点?...“Like模式”对应于有限或无限的字符串集合。该集合中的每个字符串都与给定模式匹配。我想检查两个给定模式的字符串集合的交集是否为空。因此最好说模式的连接。用数学语言来说:
S-字符串集合 P-模式集合(其中每个模式都有一个或多个字符串表示) Si-子字符串集合(Si ⊂ S),其匹配pi模式(其中i可以是任何索引)。 等式形式:“Sᵢ = {s | s ∈ S, s matches pᵢ, pᵢ ∈ P}”即:“Sᵢ是字符串元素的集合,且与pᵢ模式匹配”。 另一种符号表示法:“Sᵢ ⊂ S,∀pᵢ ∈ P,∀s ∈ S(s matches pᵢ ≡ s ∈ Sᵢ)”,即:“Sᵢ是字符串的子集,如果它与pᵢ模式匹配,则任何字符串都是Sᵢ的元素”。
让我们定义模式的连接:“p₁ ∧ p₂ = p₃ ≡ S₁ ∩ S₂ = S₃”,这意味着:“与模式p₁和p₂的连接匹配的字符串集合是匹配p₁模式的字符串集合和匹配p₂模式的字符串集合的交集”。
例如: ab_d和%cd-相交 k%n和kl___-相交
LIKE ALL
,例如:SELECT 'comm' LIKE ALL (ARRAY['_omm', 'co%']);
。然而,找出任何两个模式是否有一个或多个字符串都匹配这两个模式...那就很难了。一种方法可能是从一个模式中创建候选字符串,并将其与另一个模式进行匹配,但这会相当缓慢和不完美。我怀疑你不会轻易在SQL中解决这个问题。 - Craig Ringer'%mm'
字符串?”我不明白你在问什么。您是否要查找仅匹配一个公共字符串的模式,其中没有两个或更多的字符串同时匹配?请编辑您的问题以更好地解释您的问题,并添加更多符合您想要实现规则的模式示例和不匹配的模式示例 - 以及原因。 - Craig Ringera%
与%b
会有交集吗?我问这个问题是因为你的例子中都有非占位符。如果有,那么我们是否可以假设%
与所有内容都有交集? - Chris Traversa%
∧%b
=a%b
≠ ∅。其中 ∅ 表示没有与之匹配的字符串的模式。 - Timofey Gorshkov