比较 SQL 服务器中的两个 SUBSTRINGS
Compare two SUBSTRINGS in SQL Server
我有以下测试代码:
DECLARE
@Str1 VARCHAR(MAX) = 'Hello World'
,@Str2 VARCHAR(MAX) = 'World Hello'
SELECT CHARINDEX(@Str1, @Str2)
select 语句 returns 为零,因为它需要整个 @Str1 并试图在 @Str2[= 中找到它24=].
如何使搜索比较子字符串?
换句话说,我想要搜索以查看是否可以在 @Str2[ 中找到 @Str1 的子字符串作为子字符串=12=]
如果您只是在空格上拆分,您要做的是拆分字符串,然后搜索每个拆分词并获取它的字符索引。
这是一个简单的例子:
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
您可以使用 instr(它使用输入字符集定义的字符计算长度)来查找子字符串是否存在于 other 中。
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
我没有答案但无法发表评论:-(
问题:您要查找什么类型的子字符串。子字符串可以是整个单词 "Hello",也可以只是 "l" 的字母 "llo"。我假设您的意思是查看@Str1 中的任何 words 是否包含在@Str2 中。
然后您可以使用 found here 等拆分函数首先将 @Str1 拆分为一个列表,然后在该 table 上创建一个循环以使用 CHARINDEX 查找任何子字符串。
但这一切都取决于你对"substring"的定义
我有以下测试代码:
DECLARE
@Str1 VARCHAR(MAX) = 'Hello World'
,@Str2 VARCHAR(MAX) = 'World Hello'
SELECT CHARINDEX(@Str1, @Str2)
select 语句 returns 为零,因为它需要整个 @Str1 并试图在 @Str2[= 中找到它24=].
如何使搜索比较子字符串?
换句话说,我想要搜索以查看是否可以在 @Str2[ 中找到 @Str1 的子字符串作为子字符串=12=]
如果您只是在空格上拆分,您要做的是拆分字符串,然后搜索每个拆分词并获取它的字符索引。
这是一个简单的例子:
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
您可以使用 instr(它使用输入字符集定义的字符计算长度)来查找子字符串是否存在于 other 中。
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
我没有答案但无法发表评论:-(
问题:您要查找什么类型的子字符串。子字符串可以是整个单词 "Hello",也可以只是 "l" 的字母 "llo"。我假设您的意思是查看@Str1 中的任何 words 是否包含在@Str2 中。
然后您可以使用 found here 等拆分函数首先将 @Str1 拆分为一个列表,然后在该 table 上创建一个循环以使用 CHARINDEX 查找任何子字符串。
但这一切都取决于你对"substring"的定义