Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何在给定字符串中查找子字符串?_Sql_Sql Server_Sql Server 2014 - Fatal编程技术网

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

Sql 如何在给定字符串中查找子字符串?,sql,sql-server,sql-server-2014,Sql,Sql Server,Sql Server 2014,我想在字符串中找到一个子字符串 如果我用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 @ExpressionToF

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

如果我用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' 
两端带有通配符(%)的字符串“MM”与字符串“MMM”类似。通配符表示匹配任何字符,零或更多。所以“%M”是
类似的
“M”,它是
类似的
“MM”。事实上,它是
类似于
“(任何东西,甚至什么都没有,在这里)M”

类似地,值“%MM”类似于
的“MMM”。值“%MM%”也将是类似于“MMM”的
。它像
(任何东西,甚至没有,这里)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”由引号或字符串的开头/结尾分隔。如果是,则一种方法是:

IF '-' + @WholeString + '-' LIKE '%-' + @ExpressionToFind + '-%' 
另一种方法使用:


不清楚你在问什么,如果
MMM
是某事物的子串,那么
MM
也是。所以听起来你不是在寻找一个子串,而是在寻找别的东西。请解释您的期望。请清楚地向我们显示输入和预期输出。我想将MMM与MM匹配,就像在C#string中一样。Contains(“MM”)您说您希望在字符串上搜索
MM
ABC-MMM-0102
返回false,这与C#
字符串的行为不匹配。Contains(“MM”)
(返回true)无法工作,因为我正在使用SQL SERVER2014@ZoyebShaikh…你看到答案的第一部分了吗?这是做你想做的事情的最简单的方法。此外,你的问题中没有任何东西表明你正在使用哪个版本的SQL Server。非常感谢@Gordon Linoff你的解决方案帮助我,很抱歉我没有提到我正在使用哪个SQL版本正是我想要的谢谢你@sacse
IF EXISTS (SELECT 1 FROM string_split(@WhileString, '-') s WHERE s.value = @ExpressionToFind)