Am fost nevoit uneori sa extrag din coloana unei tabele (de tip varchar) toate caracterele delimitate de un anumit separator. (cel mai des mi s-a intamplat la importul in sql de csv-uri)
Pentru aceasta am creat o functie care primeste parametrii:
– un strig (sau o coloana de tip varchar dintr-o tabela)
– un parametru de tip varchar (care poate sa fie un caracter sau un sir de caractere) care este delimitatorul din stanga
– un alt parametru de tip varchar (care poate sa fie un caracter sau un sir de caractere) care este delimitatorul din dreapta
Functia intoarce toate stringurile gasite intre cele doua delimitatoare (parametrii 2 si 3)
– functia mai are si doi parametrii suplimentari in care se poate seta comportamentul functiei in cazul in care nu sunt gasite stringurile delimitatoare
@StringNu –
daca se pune null , si delimitatorul stanga exista, dar nu exista delimitatorul dreapta, atunci functia returneaza de la delimitatorul gasit pana la sfarsitul stringului.
daca se pune null , si delimitatorul stanga nu exista, dar exista delimitatorul dreapta, atunci functia returneaza de la inceputul stringului pana la delimitatorul dreapta.
daca se pune altceva decat null la acest prametru, este afisat acel altceva in cazul in care nu exista delimitatorul stanga, sau dreapta ori ambele.
@Off –
in mod normal acest parametru se pune cu valoarea 0
in mod special se pune cu alta valoare decat cea 0 DOAR in cazul in care , daca exista si delimitatorul stanga si cel dreapta , se vrea afisarea si inceputului stringului (aflat la stanga de delimitatorul stanga) daca stringul cautat este gasit de la pozitia @Off in sus
Exemplu (ca sa fie mai clar)
Am stringul urmator:
‘dadadadadaaasu#dfffgggg!gdfhdhh4555’
select dbo.fn_BD_StringIntreDelimitatori ( ‘dadadadadaaasu#dfffgggg!gdfhdhh4555’, ‘#’, ‘!’ , 0, null) intoarce rezultatul dfffgggg
select dbo.fn_BD_StringIntreDelimitatori ( ‘dadadadadaaasu#dfffgggg!gdfhdhh4555’, ‘#’, ‘!’ , 15, null) intoarce rezultatul dfffgggg
DAR
select dbo.fn_BD_StringIntreDelimitatori ( ‘dadadadadaaasu#dfffgggg!gdfhdhh4555’, ‘#’, ‘!’ , 16, null) intoarce rezultatul dadadadadaaasu#dfffgggg
[mai mult...]