我尝试在tsql中修改换行符。所以我想删除领先 CHAR(13)+ CHAR(10) 我在Field中的数据。并确保不会删除其他换行符。
我的意思是:
'
Kanne Oliver
Rosa-Luxemburg-Str. 3
07817 Alton ( Elster)'
应该是这样:
'Kanne Oliver
Rosa-Luxemburg-Str. 3
07817 Alton ( Elster)'
提前致谢:D
答案 0 :(得分:4)
如果数据的每一行都有开头的CR LF,只需将它们从行中剥离
SELECT SUBSTRING(3, LEN(field)) field
FROM Table
否则,如果不是所有行都以CR LF开头,则需要从中检查
SELECT CASE WHEN CHAR(13) + CHAR(10) = LEFT(field, 2)
THEN SUBSTRING(field, 3, LEN(field))
ELSE field
END
FROM Table
此前的查询只会删除第一个CR LF,删除任意数量的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)
或者,正如Filip De Vos在评论中指出的那样,搜索第一个不是CR LF的字符
SELECT SUBSTRING(sentence
, PATINDEX('%[^' + char(13) + char(10) + ']%', sentence)
, LEN(sentence))
FROM test
SQLFiddle demo同时进行两次查询
答案 1 :(得分:1)
在这个非常具体的示例中,可以使用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)');
注意:在SQL Server Management Studio中,将“查询结果设置为文本”(CTRL + T)设置为有效查看结果会很有帮助:
---------------------------------------------------------------
Kanne Oliver
Rosa-Luxemburg-Str. 3
07817 Alton ( Elster)
(1 row affected)
另请注意,如果文本字符串末尾有任何CR或LF字符,那么它们也会被删除。不幸的是,RTRIM
和LTRIM
仍然只适用于空格字符(截至SQL 2017)。
答案 2 :(得分:0)
SET ANSCHRIFT =
CASE
WHEN LEFT(LTRIM(SUBSTRING(ANSCHRIFT, 5, LEN(ANSCHRIFT)-4)),2) = CHAR(13)+ CHAR(10)
THEN SUBSTRING(LTRIM(SUBSTRING(ANSCHRIFT, 5,LEN(ANSCHRIFT)-4)),3,LEN(LTRIM(SUBSTRING(ANSCHRIFT, 5, LEN(ANSCHRIFT)-4)))-2)
ELSE LTRIM(SUBSTRING(ANSCHRIFT, 5, LEN(ANSCHRIFT)-4))
END
管理了这个!
ANSCHRIFT代表包含数据的列名。感谢您的想法和帮助。
答案 3 :(得分:-2)
Transact-SQL中的RTRIM函数在截断所有尾随空白后返回一个字符串,而LTRIM在删除前导空格后返回一个字符表达式。
因此,要从字符串中删除前导或尾随空格,您可以按如下方式编写:
SELECT RTRIM(LTRIM(YourColumnName)) AS FirstName FROM [dbo].[StaffInformation]