我正在尝试模仿 OracleRTRIM(expression, characters)
在 MsSql Server 2008 R2 中使用以下查询:
REVERSE(
SUBSTRING(
REVERSE(field),
PATINDEX('%[^chars]%', REVERSE(field)),
LEN(field) - PATINDEX('%[^chars]%', REVERSE(field)) + 1
)
)
问题是我希望能够修剪像]
and ^
这可能确实需要转义。
我不知道该怎么做。像\]
不工作。
我知道ESCAPE
子句,但我不明白它到底是如何工作的,顺便说一句,如果把它放在模式字符串后面,SqlServer 会拒绝它。
有趣的事实:
如果我写%[^^]%
(想要修剪^
)它不起作用。
如果我写%[^ ^]%
它确实修剪^
,但显然也修剪空格!
不漂亮,但是……
CREATE FUNCTION dbo.RTRIMCHARS(
@input AS VARCHAR(MAX), @chars AS VARCHAR(100)
) RETURNS VARCHAR(MAX)
AS
BEGIN
DECLARE @charpos BIGINT
DECLARE @strpos BIGINT
SET @strpos = LEN(@input)
SET @charpos = LEN(@chars)
IF @strpos IS NULL OR @charpos IS NULL RETURN NULL
IF @strpos = 0 OR @charpos = 0 RETURN @input
WHILE @strpos > 0
BEGIN
SET @charpos = LEN(@chars)
WHILE @charpos > 0
BEGIN
IF SUBSTRING(@chars, @charpos, 1) = SUBSTRING(@input, @strpos, 1)
BEGIN
SET @strpos = @strpos - 1
BREAK
END
ELSE
BEGIN
SET @charpos = @charpos - 1
END
END
IF @charpos = 0 BREAK
END
RETURN SUBSTRING(@input, 1, @strpos)
END
Usage
SELECT dbo.RTRIMCHARS('bla%123', '123%') -- 'bla'
SELECT dbo.RTRIMCHARS('bla%123', '123') -- 'bla%'
SELECT dbo.RTRIMCHARS('bla%123', 'xyz') -- 'bla%123'
SELECT dbo.RTRIMCHARS('bla%123', ']') -- 'bla%123'
SELECT dbo.RTRIMCHARS('bla%123', '') -- 'bla%123'
SELECT dbo.RTRIMCHARS('bla%123', NULL) -- NULL
SELECT dbo.RTRIMCHARS(NULL, '123') -- NULL
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)