¿Cómo LTRIM/RTRIM caracteres específicos?

Tengo esta nvarchar cuerda para ejemplo:

declare @s as nvarchar(max)
set @s = '  ##a# bc##   ###'

Así que necesito que se recorten los espacios, pero también el # caracteres.
¿Cómo puedo devolver solo 'a# bc'?

(cantidad de números iniciales y finales) # puede variar)

preguntado el 03 de mayo de 12 a las 14:05

¿Esperas que # aparezca en otro lugar? o simplemente líder/trasero? Siempre 3 ###? -

@gbn, sí. Actualizaré mi pregunta. Gracias por notarlo. -

2 Respuestas

Puede usar las siguientes funciones genéricas para cortar caracteres iniciales y finales arbitrarios, simplemente llamando

dbo.LTrimX(dbo.RTrimX(' ##a# bc### ', ' #'), ' #')

Aquí las UDF (adaptadas de aquí):

CREATE FUNCTION dbo.LTrimX(@str VARCHAR(MAX), @trimchars VARCHAR(255)) RETURNS VARCHAR(MAX)
     AS
     BEGIN  
     IF @str LIKE '[' + @trimchars + ']%'
     SET @str =STUFF ( @str , 1 , PATINDEX('%[^' + @trimchars + ']%', @str)-1 , '')
     RETURN @str
END

CREATE FUNCTION dbo.RTrimX(@str VARCHAR(MAX), @trimchars VARCHAR(255)) RETURNS VARCHAR(MAX)
     AS
     BEGIN
     IF @str LIKE '%[' + @trimchars + ']' 
     SET @str = REVERSE(dbo.LTrimX(REVERSE(@str), @trimchars))
     RETURN @str
END
GO

contestado el 03 de mayo de 12 a las 16:05

¿Puedo cambiar con seguridad VARCHAR a NVARCHAR en sus funciones? - ZigiZ

Como todas las funciones involucradas apoyan NVARCHAR Diría que sí, pero no lo probé. - Micrófono

Suponiendo que la parte abc solo se compone de números y letras:

DECLARE @s NVARCHAR(50)
SET @s = ' ##a# bc### '

SELECT 
SUBSTRING(@s,PATINDEX('%[A-Za-z0-9]%',@s),LEN(@s) - PATINDEX('%[A-Za-z0-9]%',REVERSE(@s)) -1) as string2

contestado el 03 de mayo de 12 a las 15:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.