'
Kanne Oliver
Rosa-Luxemburg-Str. 3
07817 Alton ( Elster)'
Should be this:
'Kanne Oliver
Rosa-Luxemburg-Str. 3
07817 Alton ( Elster)'
提前致谢
4 回答
0
如果数据的每一行都有开头的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,删除任何数量的它们'可以使用递归 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
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
4 回答
如果数据的每一行都有开头的CR LF,只需将它们从行中剥离
否则,如果不是所有行都以CR LF开头,则需要从中检查
在此之前的查询将只删除第一个CR LF,删除任何数量的它们'可以使用递归
CTE
或者,正如Filip De Vos在评论中指出的那样,搜索第一个不是CR LF的字符
SQLFiddle demo两个查询
在这个非常具体的示例中,可以使用SQL Server 2017的TRIM()函数 . 它将字符串的开头和结尾的字符从文本中删除 . 默认情况下,
TRIM
仅删除空格CHAR(32)
个字符 . 在这里,将指定要删除的字符(CR和LF):注意:在SQL Server Management Studio中,将“查询结果转换为文本”(CTRL T)有助于有效地查看结果:
另请注意,如果文本字符串末尾有任何CR或LF字符,那么它们也会被删除 . 不幸的是,
RTRIM
和LTRIM
仍然只适用于空格字符(从SQL 2017开始) .管理了这个!
ANSCHRIFT代表包含数据的列名 . 感谢您的想法和帮助 .
Transact-SQL中的RTRIM函数在截断所有尾随空白后返回一个字符串,而LTRIM在删除前导空格后返回一个字符表达式 .
因此,要从字符串中删除前导或尾随空格,您可以按如下方式编写: