我尝试搜索Dhaka is the capital of Bangladesh
包含六个单词的字符串。如果我的搜索文本是cap
(这是大写的起始文本),它将为我提供字符串中搜索文本的起始索引(此处为 14)。如果搜索文本包含在字符串中但不包含任何单词的起始文本,它将给我 0。请查看测试用例以更好地理解。
我试过的
DECLARE @SearchText VARCHAR(20),
@Str VARCHAR(MAX),
@Result INT
SET @Str = 'Dhaka is the capital of Bangladesh'
SET @SearchText = 'cap'
SET @Result = CASE WHEN @Str LIKE @SearchText + '%'
OR @Str LIKE + '% ' + @SearchText + '%'
THEN CHARINDEX(@SearchText, @Str)
ELSE 0 END
PRINT @Result -- print 14 here
就我而言,我需要@Str
使用另一个 sql 函数生成。在这里,我们需要生成@Str
3 次,这很昂贵(我认为)。那么,有什么方法可以让我@Str
只需要生成一次吗?[是否可以通过使用PATINDEX
]
注意: CASE
条件出现在我原始查询的 where 子句中。因此,不可能@Str
在变量中设置值然后在 where 子句中使用它。
测试用例
Search Text
:达卡,Result
: 1Search Text
:总,Result
: 0Search Text
:米尔普尔,Result
: 0Search Text
:是,Result
: 0Search Text
:是,Result
: 7Search Text
:达卡首都,Result
: 0