我想从字符串中提取匹配的单词。例如
Str = "This is Nihar Kulkarni as Indian"
在这里,我们将使用LIKE来获取所有包含“%India%”的记录,但在这里我想提取匹配的整个单词。假设印度匹配这些字符串,所以我希望将“印度”作为输出。
谢谢
答案 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。