从sql中的字符串中提取匹配的单词

时间:2019-02-22 09:47:42

标签: sql sql-server

我想从字符串中提取匹配的单词。例如

Str = "This is Nihar Kulkarni as Indian"

在这里,我们将使用LIKE来获取所有包含“%India%”的记录,但在这里我想提取匹配的整个单词。假设印度匹配这些字符串,所以我希望将“印度”作为输出。

谢谢

4 个答案:

答案 0 :(得分:1)

像这样吗?

DECLARE @Word varchar(10) = 'India'

SELECT SUBSTRING(V.S,CIw.I, ISNULL(NULLIF(CIs.I,0),LEN(V.S)+1) - CIw.I)
FROM (VALUES('This is Nihar Kulkarni as Indian')) V(S)
     CROSS APPLY (VALUES(CHARINDEX(@Word,V.S))) CIw(I)
     CROSS APPLY (VALUES(CHARINDEX(' ',V.S,CIw.I))) CIs(I);

这将获取单词的位置,然后获取下一个空格。如果之后没有空格,则使用完整值(+1)的长度。请注意,如果您的值中有语法,例如'This is Nihar Kulkarni, who is Indian.''He is Indian, but lives in Europe',则将分别返回值'Indian.''Indian,'

答案 1 :(得分:1)

您可以尝试使用任何您喜欢的单词:

DECLARE @MatchedWord VARCHAR(50) = 'Indian'
DECLARE @Str  VARCHAR(50) = 'This is Nihar Kulkarni as Indian'

SELECT SUBSTRING(@Str,CHARINDEX(@MatchedWord,@Str),LEN(@MatchedWord))

答案 2 :(得分:0)

您可以尝试以下查询:

select * from table_name where Str LIKE 'India%'

答案 3 :(得分:0)

您可以尝试以下查询。首先,我通过分隔空格将给定字符串的所有单词插入表中。之后,已选择使用该表中的类似匹配记录。

DECLARE @Stringtofindmatching VARCHAR(MAX) = 'This is Nihar Kulkarni as Indian'
DECLARE @table TABLE ( matchingword VARCHAR(50) )
DECLARE @x INT = 0
DECLARE @firstspace INT = 0
DECLARE @nextspace INT = 0

SET @x = LEN(@Stringtofindmatching) - LEN(REPLACE(@Stringtofindmatching, ' ', '')) + 1 -- number of ids in id_list

WHILE @x > 0
    BEGIN
        SET @nextspace = CASE WHEN CHARINDEX(' ', @Stringtofindmatching, @firstspace + 1) = 0
                              THEN LEN(@Stringtofindmatching) + 1
                              ELSE CHARINDEX(' ', @Stringtofindmatching, @firstspace + 1)
                         END
        INSERT  INTO @table
        VALUES  ( SUBSTRING(@Stringtofindmatching, @firstspace + 1, (@nextspace - @firstspace) - 1) )
        SET @firstspace = CHARINDEX(' ', @Stringtofindmatching, @firstspace + 1)
        SET @x = @x - 1
    END

SELECT  *
FROM @table where matchingword like '%India%'

您可以找到实时演示Here