如何在给定字符串中查找子字符串?

Posted

技术标签:

【中文标题】如何在给定字符串中查找子字符串?【英文标题】:How to find a substring in given string? 【发布时间】:2020-07-25 06:55:33 【问题描述】:

我想在一个字符串中找到一个子字符串

如果我用 MM 搜索它应该是假的,而用 MMM 搜索它应该是真的。但是,如果我用 MM 搜索,它给了我真实的信息。请帮助查找子字符串。输入可能是 ABC-8102-MMM 或 ABC-MMM-0102 或 MMM-TTR-0102

DECLARE @WholeString VARCHAR(50)  
DECLARE  @ExpressionToFind VARCHAR(50)  
SET @WholeString = 'ABC-MMM-0102'  
SET @ExpressionToFind = 'MM'  
   
IF @WholeString LIKE '%' + @ExpressionToFind + '%' 
    begin 
    PRINT 'Yes it is find'    
    end  
ELSE  
    PRINT 'It doesn''t find' 

【问题讨论】:

不清楚你在问什么,如果MMM 是某个东西的子字符串,那么MM 也是。因此,听起来您不是在搜索子字符串,而是在搜索其他内容。请说明您的期望。 请清楚地向我们展示输入和预期输出。 我想像 C# string.Contains("MM") 中那样将 MMM 与 MM 匹配 您说您希望在字符串 ABC-MMM-0102 上搜索 MM 返回 false,这与 C# string.Contains("MM") 的行为不匹配(返回 true)。跨度> 【参考方案1】:

您似乎希望用引号或字符串的开头/结尾分隔“MMM”。如果是这样,那么一种方法是:

IF '-' + @WholeString + '-' LIKE '%-' + @ExpressionToFind + '-%' 

另一种方法使用string_split()

IF EXISTS (SELECT 1 FROM string_split(@WhileString, '-') s WHERE s.value = @ExpressionToFind)

【讨论】:

string_split() 无法正常工作,因为我使用的是 SQL SERVER 2014 @ZoyebShaikh 。 . .你看到答案的第一部分了吗?这是做你想做的最简单的方法。此外,您的问题中没有任何内容表明您使用的是什么版本的 SQL Server。 非常感谢@Gordon Linoff 您的解决方案对我的帮助,抱歉我没有提到我使用的是哪个 SQL 版本【参考方案2】:

您可以在表达式中添加限制字符 (-),如下所示:

IF @WholeString LIKE '%-' + @ExpressionToFind + '-%' 
    OR @WholeString LIKE '%-' + @ExpressionToFind + '' 
    OR @WholeString LIKE '' + @ExpressionToFind + '-%'
    begin 
    PRINT 'Yes it is find'    
    end  
ELSE  
    PRINT 'It doesn''t find' 

【讨论】:

正是我要找的东西,谢谢@sacse【参考方案3】:

两端带有通配符 (%) 的字符串“MM”是like 字符串“MMM”。通配符意味着匹配任何字符,零个或多个。所以“%M”是like“M”,它是like“MM”。其实就是like"(anything at all, even nothing, here)M"。

同样,值“%MM”是like“MMM”。值“%MM%”也将是like“MMM”。是like“(什么都没有,甚至什么都没有,这里)MM(什么都没有,甚至什么都没有,这里也是)”。

如果您只想找到那些带有“MMM”的案例,那么您应该搜索:

DECLARE @WholeString VARCHAR(50)  
DECLARE  @ExpressionToFind VARCHAR(50)  
SET @WholeString = 'ABC-MMM-0102'  
SET @ExpressionToFind = 'MMM'  
   
IF @WholeString LIKE '%' + @ExpressionToFind + '%' 
    begin 
    PRINT 'Yes it is find'    
    end  
ELSE  
    PRINT 'It doesn''t find' 

【讨论】:

以上是关于如何在给定字符串中查找子字符串?的主要内容,如果未能解决你的问题,请参考以下文章

查找给定字符串中回文子串的数量的程序

如果给定的字符串包含给定的子字符串,那么惯用的 scala 查找方式是啥?

查找给定字符串的所有前缀的最长回文子串的长度

查找加起来为给定字符串的所有子字符串组合

如何找到没有重复字符的最长子字符串?

正则表达式查找所有子字符串和最长的子字符串