SQL如何删除字符串结尾的新行?

时间:2017-03-29 13:16:54

标签: sql sql-server regex

当我需要删除(或替换)字符串末尾的新行时遇到问题:

像这样的事情

-----
test


----

----
test
----

我遇到了一些例子,例如

isnull(LEFT(fielddata, LEN(fielddata) - PATINDEX('%[^'+CHAR(9)+CHAR(10)+CHAR(12)+CHAR(13)+']%', REVERSE(fielddata))+1),'') as ResultValue

但它似乎不能很好地工作(在某些情况下还有新的线路)。使用像正则表达式^\s+$这样的东西可能更合适,但我不确定它应该看起来如何(只是将正则表达式放入示例中似乎不起作用)

请帮帮我吗?

更新

----不是字符串的一部分!我根本不知道我怎么想在此之前显示字符串(使用新行)和没有它们之后的字符串。

更新2

找到上一个示例在任何情况下都不起作用的原因。如果字符串只包含新行(是的,我有这种情况),它什么都不做。

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