Functia INSTR

Configurare noua (How To)

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

Tip solutie

Permanent
Etichetare:

Voteaza

(21 din 48 persoane apreciaza acest articol)

Despre Autor

Leave A Comment?