如何LTRIM / RTRIM特定字符?

时间:2012-05-03 13:57:40

标签: sql-server sql-server-2008 tsql sql-server-2005

我有示例的<{1}}字符串:

nvarchar

所以我需要空间来进行训练,还需要declare @s as nvarchar(max) set @s = ' ##a# bc## ###' 个字符 我怎样才能返回#

(领先和尾随'a# bc'的数量可能会有所不同)

2 个答案:

答案 0 :(得分:4)

假设abc部分只由数字和字母组成:

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

答案 1 :(得分:4)

您可以使用以下通用函数来剪切任意前导和尾随字符,只需调用

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

这里的UDF(改编自here):

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