Всем доброго дня!
Есть функция в VB Скрипт InStr, а в SQL Server есть аналог - функция PATINDEX.
А вот эквивалент InStrRev я не нашёл. Пришлось сочинить самому.
Хотелось бы узнать нет ли здесь подводных камней? А может предложите более оптимальное / лучшее решение чем этот?
Есть функция в 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;
Хотелось бы узнать нет ли здесь подводных камней? А может предложите более оптимальное / лучшее решение чем этот?