Situatie
Pentru ca am avut nevoie de multe ori de o functie in sql server, care sa fie similara functiei INSTR din Oracle, am construit o astfel de functie folosind functiile builtin ale SQL Server.
Functia care are urmatorii parametri:
– un parametru de tip text (poate sa fie si o coloana de tip text dintr-o tabela) : @str
– un al doilea parametru de tip text: @substr
– un parametru de tip intreg : @start
– un al doilea parametru de tip intreg : @position
Functia replica ceea ce face functia INSTR in Oracle, mai exact, cauta cel de-al doilea parametru (@substr) in primul parametru (@str),
de la pozitia @start si cauta ocurenta cu numarul @position.
Un exemplu pt edificare:
SELECT dbo.SqlServer_INSTR (‘Ana are mare’,’a’,4,2) intoarce pozitia 6, pentru ca functia cauta, incepand de la pozitia 4, a doua ocurenta a literei a.
Solutie
CREATE FUNCTION SqlServer_INSTR (@str VARCHAR(8000), @substr VARCHAR(255), @start INT, @position INT)
RETURNS INT
AS
BEGIN
DECLARE @found INT = @position,
@pos INT = @start;
WHILE 1=1
BEGIN
SET @pos = CHARINDEX(@substr, @str, @pos);
IF @pos IS NULL OR @pos = 0
RETURN @pos;
IF @found = 1
BREAK;
SET @found = @found – 1;
SET @pos = @pos + 1;
END
RETURN @pos-@start;
END
GO
Leave A Comment?