当我需要删除(或替换)字符串末尾的新行时遇到问题:
像这样的事情
-----
test
----
到
----
test
----
我遇到了一些例子,例如
isnull(LEFT(fielddata, LEN(fielddata) - PATINDEX('%[^'+CHAR(9)+CHAR(10)+CHAR(12)+CHAR(13)+']%', REVERSE(fielddata))+1),'') as ResultValue
但它似乎不能很好地工作(在某些情况下还有新的线路)。使用像正则表达式^\s+$
这样的东西可能更合适,但我不确定它应该看起来如何(只是将正则表达式放入示例中似乎不起作用)
请帮帮我吗?
更新
----
不是字符串的一部分!我根本不知道我怎么想在此之前显示字符串(使用新行)和没有它们之后的字符串。
更新2
找到上一个示例在任何情况下都不起作用的原因。如果字符串只包含新行(是的,我有这种情况),它什么都不做。
答案 0 :(得分:0)
TRANSLATE()函数应该这样做(REGEXP_REPLACE()也可以工作,但效率更低):
SELECT TRANSLATE(your_col, chr(10)||chr(11)||chr(13), '') FROM YOUR_TAB;
这应该删除所有换行符,CR和tabstops。如果这还不够(因为示例中的空白行包含许多单个空格或其他内容),您可能需要进行调整。
答案 1 :(得分:0)
你可以尝试下面的,应该像你期望的那样工作。
DECLARE @TEST NVARCHAR(MAX) = 'TEST
'
SELECT @TEST --test before
SET @TEST = (SELECT REPLACE(REPLACE(@TEST, CHAR(13), ''), CHAR(10), ''))
SELECT @TEST --test after