Spe*_*ius 6 t-sql newline trim
我尝试在 tsql 中保留换行符。所以我想删除字段中数据的前导 CHAR(13) + CHAR(10)。并确保其他换行符不会被删除。
我的意思是:
'
Kanne Oliver
Rosa-Luxemburg-Str. 3
07817 Alton ( Elster)'
Run Code Online (Sandbox Code Playgroud)
应该是这样的:
'Kanne Oliver
Rosa-Luxemburg-Str. 3
07817 Alton ( Elster)'
Run Code Online (Sandbox Code Playgroud)
先谢谢了
在这个非常具体的示例中,可以使用SQL Server 2017 的TRIM()函数。它将字符串开头和结尾的字符删除为文本。默认情况下仅TRIM删除空格CHAR(32)字符。在这里,将指定要删除的字符(CR 和 LF):
SELECT TRIM( CHAR(13) + CHAR(10) FROM '
Kanne Oliver
Rosa-Luxemburg-Str. 3
07817 Alton ( Elster)');
Run Code Online (Sandbox Code Playgroud)
注意:在 SQL Server Management Studio 中,将“查询结果设置为文本”(CTRL + T) 将有助于有效地查看结果:
---------------------------------------------------------------
Kanne Oliver
Rosa-Luxemburg-Str. 3
07817 Alton ( Elster)
(1 row affected)
Run Code Online (Sandbox Code Playgroud)
另请注意,如果文本字符串末尾有任何 CR 或 LF 字符,这些字符也会被删除。不幸的是,RTRIM仍然LTRIM仅适用于空格字符(截至 SQL 2017)。
如果数据的每一行开头都有 CR LF,只需将它们从行中删除
SELECT SUBSTRING(3, LEN(field)) field
FROM Table
Run Code Online (Sandbox Code Playgroud)
否则,如果不是所有行都以 CR LF 开头,您需要从中检查
SELECT CASE WHEN CHAR(13) + CHAR(10) = LEFT(field, 2)
THEN SUBSTRING(field, 3, LEN(field))
ELSE field
END
FROM Table
Run Code Online (Sandbox Code Playgroud)
在此之前的查询只会删除第一个 CR LF,要删除任意数量的它们,可以使用递归CTE
WITH S AS (
SELECT sentence
= CASE WHEN char(13) + char(10) = LEFT(sentence, 2)
THEN SUBSTRING(sentence, 3, LEN(sentence))
ELSE sentence
END
FROM Test
UNION ALL
SELECT sentence = SUBSTRING(sentence, 3, LEN(sentence))
FROM S
WHERE char(13) + char(10) = LEFT(sentence, 2)
)
select Sentence
FROM S
WHERE char(13) + char(10) <> LEFT(sentence, 2)
Run Code Online (Sandbox Code Playgroud)
或者,正如 Filip De Vos 在评论中指出的那样,搜索第一个不是 CR LF 的字符
SELECT SUBSTRING(sentence
, PATINDEX('%[^' + char(13) + char(10) + ']%', sentence)
, LEN(sentence))
FROM test
Run Code Online (Sandbox Code Playgroud)
包含两个查询的SQLFiddle 演示
Sta*_*ace -3
Transact-SQL 中的 RTRIM 函数在截断所有尾随空格后返回字符串,而 LTRIM 在删除前导空格后返回字符表达式。
因此,要从字符串中删除前导或尾随空格,您可以编写如下:
SELECT RTRIM(LTRIM(YourColumnName)) AS FirstName FROM [dbo].[StaffInformation]
Run Code Online (Sandbox Code Playgroud)