仅在字符串末尾替换换行符

问题描述 投票:0回答:4

我需要类似

TRIM
的函数来删除字符串左侧或右侧的新行字符。

我无法使用以下代码:

DECLARE @str nVarchar(MAX) = 'Hello' + CHAR(10) + 'World' + CHAR(10)
SET @str = REPLACE(REPLACE(@Str, CHAR(10), ''), CHAR(13), '')

因为我在变量中间有新行。我只需要删除开始或结束位置的新行字符。

我预计

TRIM
函数可以做到这一点,但我失败了。 你还知道其他功能吗?

sql-server tsql newline
4个回答
0
投票

如果换行符始终是最后一个字符,则:

DECLARE @str nVarchar(MAX) = 'Hello' + CHAR(10) + 'World' + CHAR(10)
SELECT  substring(@str,1,len(@str)-1)

如果它是您想要的字符串的最后一次出现,那么:

SELECT REVERSE(Reverse(Stuff(@str, CharIndex(CHAR(10),@str),1,'')))

0
投票

您可以使用的一种方法是,

DECLARE @str nVarchar(MAX) =  CHAR(10) +'Hello' + CHAR(10) + 'World' + CHAR(10)

SELECT      (CASE WHEN LEFT(@str,1)  = CHAR(10) THEN '' ELSE LEFT(@str,1) END)  
        +   SUBSTRING(@str,2,LEN(@str)-2)
        +   (CASE WHEN RIGHT(@str,1)  = CHAR(10) THEN '' ELSE RIGHT(@str,1) END)    

如果不是则获取第一个字母

CHAR(10)
+ 获取从倒数第二个字母到倒数第二个字母的子字符串 + 获取最后一个字母(如果不是)
CHAR(10)

您可以将其创建为用户定义的函数。


0
投票

获取 Microsoft 提供的字符串实用函数,您将直接在 T-SQL 语句中获得正则表达式支持。

对于解决如此简单的任务,这可能看起来需要付出巨大的努力(实现 SQL CLR 函数),但相信我,在许多情况下,拥有这些函数将简化您的解决方案。


0
投票

用这个

TRIM(char(10) FROM @string)

Declare @string varchar(50) = 'Remove new line' +char(10) + 'only from end of the string.' + char(10) + char(10) + char(10) + char(10)

print  TRIM(char(10) FROM @string) + ' the end!'
© www.soinside.com 2019 - 2024. All rights reserved.