我需要类似
TRIM
的函数来删除字符串左侧或右侧的新行字符。
我无法使用以下代码:
DECLARE @str nVarchar(MAX) = 'Hello' + CHAR(10) + 'World' + CHAR(10)
SET @str = REPLACE(REPLACE(@Str, CHAR(10), ''), CHAR(13), '')
因为我在变量中间有新行。我只需要删除开始或结束位置的新行字符。
我预计
TRIM
函数可以做到这一点,但我失败了。
你还知道其他功能吗?
如果换行符始终是最后一个字符,则:
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,'')))
您可以使用的一种方法是,
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)
。
您可以将其创建为用户定义的函数。
获取 Microsoft 提供的字符串实用函数,您将直接在 T-SQL 语句中获得正则表达式支持。
对于解决如此简单的任务,这可能看起来需要付出巨大的努力(实现 SQL CLR 函数),但相信我,在许多情况下,拥有这些函数将简化您的解决方案。
用这个
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!'