Quantcast
Channel: SQL.ru: Microsoft SQL Server
Viewing all articles
Browse latest Browse all 7251

Функция похожая на InStrRev

$
0
0
Всем доброго дня!

Есть функция в VB Скрипт InStr, а в SQL Server есть аналог - функция PATINDEX.
А вот эквивалент InStrRev я не нашёл. Пришлось сочинить самому.
CREATE FUNCTION dbo.InStrRev
(@StringCheck Varchar(MAX), @StringMatch Varchar(MAX))
RETURNS Int
AS BEGIN
    DECLARE @Reverse AS Varchar(Max), @Result AS Int;

    IF @StringCheck Is Null OR @StringMatch Is Null
        RETURN 0;

    SELECT @Reverse = REVERSE(@StringCheck);
    IF @StringMatch NOT LIKE '%[%]%'
        SET @StringMatch = '%' + @StringMatch + '%';
    ELSE
        SET @StringMatch = '%' + REPLACE(REPLACE(LTRIM(RTRIM(REPLACE(REPLACE(@StringMatch,
            ' ', CHAR(1)), '%', ' '))), ' ', '%'), CHAR(1), ' ') + '%';

	IF PATINDEX(REVERSE(@StringMatch), @Reverse) = 0
        SET @Result = 0;
    ELSE
        SET @Result = LEN(@StringCheck)-PATINDEX(REVERSE(@StringMatch), @Reverse) +
            4 - LEN(@StringMatch);

	RETURN @Result;
END;


Хотелось бы узнать нет ли здесь подводных камней? А может предложите более оптимальное / лучшее решение чем этот?

Viewing all articles
Browse latest Browse all 7251