gpt4 book ai didi

sql-server-2008-r2 - 转义 T-SQL "pattern"表达式字符类中的 ] 和 ^ 字符

转载 作者:行者123 更新时间:2023-12-02 02:05:28 26 4
gpt4 key购买 nike

我正在尝试使用以下查询在 MsSql Server 2008 R2 中模拟 Oracle 的 RTRIM(expression, characters):

REVERSE(
SUBSTRING(
REVERSE(field),
PATINDEX('%[^chars]%', REVERSE(field)),
LEN(field) - PATINDEX('%[^chars]%', REVERSE(field)) + 1
)
)

问题是我希望能够修剪像 ]^ 这样可能需要转义的字符。

我不知道该怎么做。 \] 之类的东西不起作用。

我知道 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

用法

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

关于sql-server-2008-r2 - 转义 T-SQL "pattern"表达式字符类中的 ] 和 ^ 字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15290737/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com