在SQL中左边修剪换行符

时间:2014-06-12 12:33:11

标签: tsql newline trim

我尝试在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

4 个答案:

答案 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字符,那么它们也会被删除。不幸的是,RTRIMLTRIM仍然只适用于空格字符(截至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]