Я сделал это, создав несколько отдельных пользовательских функций, по одной для каждой позиции искомого символа, т.е. 2-го, 3-го:
CREATE FUNCTION [dbo]. [FnCHARPOS2] (@SEARCHCHAR VARCHAR (255), @SEARCHSTRINGVARCHAR (255)) ВОЗВРАЩАЕТСЯ INT, КАК НАЧИНАЕТ ВОЗВРАТ CHARINDEX (@ SEARCHCHAR, @ SEARCHSTRING (CHARINDEX (@ SEARCHCHAR, @ SEARCHSTRING, 0) +1));
CREATE FUNCTION [dbo].[fnCHARPOS3]
(@SEARCHCHAR VARCHAR(255),
@SEARCHSTRING VARCHAR(255))
RETURNS INT
AS
BEGIN
RETURN CHARINDEX(@SEARCHCHAR,@SEARCHSTRING, (CHARINDEX(@SEARCHCHAR,@SEARCHSTRING, (CHARINDEX(@SEARCHCHAR,@SEARCHSTRING,0)+1)))+1);
Затем можно передать как параметрсимвол, который вы ищете, и строка, в которой вы ищете:
Так что, если вы искали 'f' и хотели узнать позицию первых 3 вхождений:
select
database.dbo.fnCHARPOS2('f',tablename.columnname),
database.dbo.fnCHARPOS3('f',tablename.columnname)
from tablename
Это сработалодля меня!