如何在给定字符串中查找子字符串?
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'
【讨论】:
以上是关于如何在给定字符串中查找子字符串?的主要内容,如果未能解决你的问题,请参考以下文章