SQL query for a carriage return in a string and ultimately removing carriage return

后端 未结 10 1509
-上瘾入骨i
-上瘾入骨i 2020-12-04 17:37

SQL query for a carriage return in a string and ultimately removing carriage return

I have some data in a table and there are some carriage returns in places where I

相关标签:
10条回答
  • 2020-12-04 18:16

    In SQL Server I would use:

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

    This will search for both carriage returns and line feeds.

    If you want to search for tabs too just add:

    OR CHARINDEX(CHAR(9), name) <> 0
    
    0 讨论(0)
  • 2020-12-04 18:17

    If you are considering creating a function, try this: DECLARE @schema sysname = 'dbo' , @tablename sysname = 'mvtEST' , @cmd NVarchar(2000) , @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
    
    0 讨论(0)
  • 2020-12-04 18:19

    You can create a function:

    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
    

    Then you can simple run a query like this:

    SELECT column_name, dbo.[Check_existance_of_carriage_return_line_feed] (column_name)
    AS [Boolean]
    FROM [table_name]
    
    0 讨论(0)
  • 2020-12-04 18:21

    Omit the double quotes from your first query.

    ... LIKE '%\n%' 
    
    0 讨论(0)
提交回复
热议问题