首页 文章

在TSQL中留下修剪换行符

提问于
浏览
3

我试图在tsql中修剪换行符 . 所以我想删除字段中数据的前导CHAR(13)CHAR(10) . 并确保不会删除其他换行符 .

I mean this:

'
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
    

    SQLFiddle demo两个查询

  • 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开始) .

  • 4
    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代表包含数据的列名 . 感谢您的想法和帮助 .

  • -2

    Transact-SQL中的RTRIM函数在截断所有尾随空白后返回一个字符串,而LTRIM在删除前导空格后返回一个字符表达式 .

    因此,要从字符串中删除前导或尾随空格,您可以按如下方式编写:

    SELECT RTRIM(LTRIM(YourColumnName)) AS FirstName FROM [dbo].[StaffInformation]
    

相关问题