복붙노트

[SQL] SQL의 문자열에 캐리지 리턴에 대한 쿼리 및 궁극적으로 캐리지 리턴을 제거

SQL

SQL의 문자열에 캐리지 리턴에 대한 쿼리 및 궁극적으로 캐리지 리턴을 제거

SQL의 문자열에 캐리지 리턴에 대한 쿼리 및 궁극적으로 캐리지 리턴을 제거

나는 테이블의 일부 데이터를 가지고 내가 그들을 원하지 않는 장소에서 일부 캐리지 리턴이있다. 나는 캐리지 리턴이 포함 된 문자열을 모두 얻을 수있는 쿼리를 작성하려합니다.

나는이 시도

select * from Parameters
where Name LIKE '%"\n" %'

또한

select * from Parameters
where Name LIKE '\r'

'

모두는 유효한 SQL하지만 내가 무엇을 찾고 반환되지 않습니다. 나는처럼 명령 또는 다른 명령을 사용해야합니까? 어떻게 쿼리에 캐리지 리턴을받을 수 있나요?

캐리지 리턴은 두 줄의 끝 (중간에있을 수 있습니다)에 필요하지 않습니다.

해결법

  1. ==============================

    1.이 속도가 느릴 수 있지만, 그것은 한 번 일 경우, 시도 할 것이다 ...

    이 속도가 느릴 수 있지만, 그것은 한 번 일 경우, 시도 할 것이다 ...

    select * from parameters where name like '%'+char(13)+'%' or name like '%'+char(10)+'%'
    

    참고는 ANSI SQL 문자열 연결 연산자이다 "||", 그것은해야 할 수도 있으므로 :

    select * from parameters where name like '%' || char(13) || '%' or name like '%' || char(10) || '%'
    
  2. ==============================

    2.주요 문제는 CR / LF를 제거하는 것이었다. 바꾸기와 문자 기능을 사용하면 나를 위해 작동합니다 :

    주요 문제는 CR / LF를 제거하는 것이었다. 바꾸기와 문자 기능을 사용하면 나를 위해 작동합니다 :

    Select replace(replace(Name,char(10),''),char(13),'')
    

    포스트 그레스 또는 Oracle SQL의 경우, 대신 CHR 함수를 사용합니다 :

           replace(replace(Name,CHR(10),''),CHR(13),'')
    
  3. ==============================

    3.에서 SQL 서버 내가 사용합니다 :

    에서 SQL 서버 내가 사용합니다 :

    WHERE CHARINDEX(CHAR(13), name) <> 0 OR CHARINDEX(CHAR(10), name) <> 0
    

    이 캐리지 리턴과 라인 피드를 모두 검색합니다.

    당신이 탭을 검색하려면 너무 단지 추가 :

    OR CHARINDEX(CHAR(9), name) <> 0
    
  4. ==============================

    4.또한 정규 표현식을 사용할 수 있습니다 :

    또한 정규 표현식을 사용할 수 있습니다 :

    SELECT * FROM Parameters WHERE Name REGEXP '\n';
    
  5. ==============================

    5.이 작품 : 선택 * 테이블의 경우 열 같은 '% (히트 입력) %'

    이 작품 : 선택 * 테이블의 경우 열 같은 '% (히트 입력) %'

    괄호를 무시하고 새로운 라인을 소개하고 Enter 키를 누르십시오.

  6. ==============================

    6.당신은 함수를 만들 수 있습니다 :

    당신은 함수를 만들 수 있습니다 :

    CREATE FUNCTION dbo.[Check_existance_of_carriage_return_line_feed]
    (
          @String VARCHAR(MAX)
    )
    RETURNS VARCHAR(MAX)
    BEGIN
    DECLARE @RETURN_BOOLEAN INT
    
    ;WITH N1 (n) AS (SELECT 1 UNION ALL SELECT 1),
    N2 (n) AS (SELECT 1 FROM N1 AS X, N1 AS Y),
    N3 (n) AS (SELECT 1 FROM N2 AS X, N2 AS Y),
    N4 (n) AS (SELECT ROW_NUMBER() OVER(ORDER BY X.n)
    FROM N3 AS X, N3 AS Y)
    
    SELECT @RETURN_BOOLEAN =COUNT(*)
    FROM N4 Nums
    WHERE Nums.n<=LEN(@String) AND ASCII(SUBSTRING(@String,Nums.n,1)) 
    IN (13,10)    
    
    RETURN (CASE WHEN @RETURN_BOOLEAN >0 THEN 'TRUE' ELSE 'FALSE' END)
    END
    GO
    

    그럼 당신은 간단하게이 같은 쿼리를 실행할 수 있습니다 :

    SELECT column_name, dbo.[Check_existance_of_carriage_return_line_feed] (column_name)
    AS [Boolean]
    FROM [table_name]
    
  7. ==============================

    7.첫 번째 쿼리의 따옴표를 생략합니다.

    첫 번째 쿼리의 따옴표를 생략합니다.

    ... LIKE '%\n%' 
    
  8. ==============================

    8.이것은 또한 작동

    이것은 또한 작동

    SELECT TRANSLATE(STRING_WITH_NL_CR, CHAR(10) || CHAR(13), '  ') FROM DUAL;
    
  9. ==============================

    9.이런 식으로 뭔가 나를 위해 작동하는 것 같다 :

    이런 식으로 뭔가 나를 위해 작동하는 것 같다 :

    SELECT * FROM Parameters WHERE Name LIKE '%\n%'
    
  10. ==============================

    10.당신이 함수를 만드는 것을 고려하는 경우에,이 시도 : 알리다 @schema은 sysname = 'DBO' , @tablename는 sysname = 'mvtEST' (2000) NVARCHAR를 @cmd , @ColName은 sysname

    당신이 함수를 만드는 것을 고려하는 경우에,이 시도 : 알리다 @schema은 sysname = 'DBO' , @tablename는 sysname = 'mvtEST' (2000) NVARCHAR를 @cmd , @ColName은 sysname

        DECLARE @NewLine Table
        (ColumnName Varchar(100)
        ,Location Int
        ,ColumnValue Varchar(8000)
        )
    
        SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE  TABLE_SCHEMA = @schema AND TABLE_NAME =  @tablename AND DATA_TYPE LIKE '%CHAR%'
    
        DECLARE looper CURSOR FAST_FORWARD for
        SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = @schema AND TABLE_NAME =  @tablename AND DATA_TYPE LIKE '%CHAR%'
        OPEN looper
        FETCH NEXT FROM looper INTO @ColName
    
        WHILE @@fetch_status = 0
        BEGIN
        SELECT @cmd = 'select ''' +@ColName+    ''',  CHARINDEX(Char(10),  '+  @ColName +') , '+ @ColName + ' from '+@schema + '.'+@tablename +' where CHARINDEX(Char(10),  '+  @ColName +' ) > 0 or CHARINDEX(CHAR(13), '+@ColName +') > 0'
        PRINT @cmd
        INSERT @NewLine ( ColumnName, Location, ColumnValue )
        EXEC sp_executesql @cmd
        FETCH NEXT FROM looper INTO @ColName
        end
        CLOSE looper
        DEALLOCATE looper
    
    
        SELECT * FROM  @NewLine
    
  11. from https://stackoverflow.com/questions/1337196/sql-query-for-a-carriage-return-in-a-string-and-ultimately-removing-carriage-ret by cc-by-sa and MIT license