2

たとえばnvarchar、次の文字列があります。

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

したがって、スペースだけでなく#文字もトリミングする必要があります。
どうすれば戻ることができ'a# bc'ますか?

(先頭と末尾の数#は異なる場合があります)

4

2 に答える 2

4

次の一般的な関数を使用して、単に呼び出すだけで、任意の先頭および末尾の文字を切り取ることができます

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

ここにUDFがあります(ここから適応

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
于 2012-05-03T15:07:42.810 に答える
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
于 2012-05-03T14:47:46.727 に答える