我有以下测试代码:
DECLARE
@Str1 VARCHAR(MAX) = 'Hello World'
,@Str2 VARCHAR(MAX) = 'World Hello'
SELECT CHARINDEX(@Str1, @Str2)
select语句返回零,因为它占用整个 @ Str1 并尝试在 @ Str2 中找到它。
如何使搜索比较子字符串?
换句话说,我想搜索一下 @ Str1 的子字符串是否可以作为 @ Str2
中的子字符串找到答案 0 :(得分:2)
如果你只是在空格上拆分你要做的就是拆分字符串,然后搜索每个拆分字并获得它的字符索引。
这是一个简单的例子:
DECLARE
@Str1 VARCHAR(MAX) = 'Hello World'
,@Str2 VARCHAR(MAX) = 'World Hello'
DECLARE @substring VARCHAR(MAX)
DECLARE c CURSOR FOR
SELECT Item = y.i.value('(./text())[1]', 'nvarchar(4000)')
FROM
(
SELECT x = CONVERT(XML, '<i>'
+ REPLACE(@Str1, ' ', '</i><i>')
+ '</i>').query('.')
) AS a CROSS APPLY x.nodes('i') AS y(i)
OPEN c
FETCH NEXT FROM c INTO @substring
WHILE @@FETCH_STATUS = 0
BEGIN
SELECT CHARINDEX(@substring, @str2)
FETCH NEXT FROM c INTO @substring
END
CLOSE c
DEALLOCATE c
答案 1 :(得分:0)
您可以使用instr(使用输入字符集定义的字符计算长度)来查找子字符串是否存在于其他字符串中。
select * from tablename
where instr(upper(str1),upper(str2)) > 0
--This would give if a str1 exist in the str2
or upper(str1) = upper(str2);--This would be same string
答案 2 :(得分:0)
我没有答案,但无法发表评论: - (
问题:您要寻找什么类型的子字符串。子字符串可以是整个单词&#34; Hello&#34;但也只是字母&#34; llo&#34;甚至&#34; l&#34;。我想你的意思是看看@ Str1中是否包含@ Str1中的任何单词。
然后使用split函数(如found here)首先将@ Str1拆分为一个列表,然后在该表上创建一个循环,以使用CHARINDEX查找任何子字符串。
但所有这些都取决于你对&#34; substring&#34;的定义。