Trovare l’ultima occorrenza di una stringa in MSSQL 2005
6 febbraio 2009
Commenti chiusi
Venendo dal mondo Oracle mi aspettavo che la funzione CHARINDEX restituisse anche l’ultima occorrenza di una certa stringa all’interno di un’altra. Grave errore!
In realt? CHARINDEX di MSSQL 2005 non scansiona una stringa partendo da destra verso sinistra neanche mettendo un indice negativo, quindi ? necessario un piccolo trucco: invertire la stringa e cercare la prima occorrenza nella stringa cos? rovesciata.
Qui sotto una funzione che restituisce la posizione di partenza dell’ultima occorrenza del testo @search in una stringa @string.
CREATE FUNCTION [CHARINDEXR] (@string AS VARCHAR(1024), @SEARCH AS VARCHAR(1024)) RETURNS INTEGER AS BEGIN DECLARE @RetVal AS INTEGER SELECT @RetVal = datalength(RTRIM(@string)) - CHARINDEX(@SEARCH,REVERSE(RTRIM(@string))) + 1 RETURN @RetVal END GO