Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.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 server 比较SQL Server中的两个子字符串_Sql Server_Tsql_Substring_Charindex - Fatal编程技术网

Sql server 比较SQL Server中的两个子字符串

Sql server 比较SQL Server中的两个子字符串,sql-server,tsql,substring,charindex,Sql Server,Tsql,Substring,Charindex,我有以下测试代码: DECLARE @Str1 VARCHAR(MAX) = 'Hello World' ,@Str2 VARCHAR(MAX) = 'World Hello' SELECT CHARINDEX(@Str1, @Str2) select语句返回零,因为它获取整个@Str1并试图在@Str2中找到它 如何使搜索比较子字符串 换句话说,我想让搜索看看@Str1的子字符串是否可以作为@Str2中的子字符串找到,如果你只是在空间上拆分,你要做的是拆分字符串,然后搜索

我有以下测试代码:

DECLARE
     @Str1 VARCHAR(MAX) = 'Hello World'
    ,@Str2 VARCHAR(MAX) = 'World Hello'

SELECT CHARINDEX(@Str1, @Str2)
select语句返回零,因为它获取整个@Str1并试图在@Str2中找到它

如何使搜索比较子字符串


换句话说,我想让搜索看看@Str1的子字符串是否可以作为@Str2中的子字符串找到,如果你只是在空间上拆分,你要做的是拆分字符串,然后搜索每个拆分的单词,并获得该单词的字符索引

下面是一个简单的例子:

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,它使用输入字符集定义的字符计算长度,以查找子字符串是否存在于其他字符串中

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,也可以是字母llo,甚至是l。我想你是想看看@Str1中的任何单词是否包含在@Str2中

然后,您将使用一个split函数,比如find,首先将@Str1拆分为一个列表,然后在该表上创建一个循环,使用CHARINDEX查找任何子字符串


但所有这些都取决于子字符串的定义

是否有子字符串?如“w”或“he”或“”?好问题,我会说谢谢,我会说,因为如果我打开任何子字符串的门,我认为这会让它变得非常复杂。。。仪表