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

How to find a substring in given string?

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

如果我用 MM 搜索它应该是假的,而用 MMM 搜索它应该是真的。但是,如果我用 MM 进行搜索,它会给出 true。请帮助查找子字符串。输入可能是 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' 

两端带有通配符 (%) 的字符串“MM”是 like 字符串“MMM”。通配符表示匹配任何字符,零个或多个。所以“%M”是like“M”,也是like“MM”。事实上,它是like“(这里什么都没有,甚至什么都没有)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' 

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

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' 

您似乎想要用引号分隔的“MMM”或字符串的 beginning/end。如果是这样,那么一种方法是:

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

另一种方法使用string_split():

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