sqlschool.gr logo

articles

Articles of SQLschool.gr Team

Remove non printable chars from a string

Antonios Chatzipavlis
Thursday 27 August 2020

Overview

Η καταχώρηση δεδομένων σε μία εφαρμογή πάντα πρέπει να περιλαμβάνει κανόνες για να εξασφαλιστεί η ποιότητα των δεδομένων και η σωστή μελλοντική επεξεργασία τους.

Οι χρήστες πάντα βρίσκουν τρόπους για να κάνουν την ζωή τους καλύτερη κατά την εισαγωγή δεδομένων. Η άποψη μου είναι ότι καλά κάνουν.

Ένας χρήστης μπορεί να εισάγει δεδομένα εκτός από την πληκτρολόγηση, με copy & paste, με import κ.α.

Ιδιαίτερη προσοχή θέλουν δύο περιπτώσεις. Η πρώτη είναι το copy-paste πχ από word/excel και η δεύτερη περίπτωση να υπάρχει δυνατότητα πληκτρολόγησης κειμένου μέσα στην εφαρμογή όπου μπορεί να πατήσει enter για αλλαγή γραμμής.

Σε αυτές τις περιπτώσεις συνήθως καταχωρούνται και οι χαρακτήρες που δεν φαίνονται όπως το CR/LF και άλλοι.

Τέτοιοι χαρακτήρες είναι γνωστοί σαν non printable characters και είναι γνωστοί από το ASCII table. Αυτοί οι χαρακτήρες είναι από το 0 - 31 (βλέπε την παρακάτω εικόνα).


Ascii table
image

The problem

Συνήθως δεν υπάρχει πρόβλημα στην εφαρμογή γιατί έχει προβλεφθεί σε αυτή αυτό (τουλάχιστον στις περισσότερες).

Το πρόβλημα όμως είναι όταν τα δεδομένα αυτά πρέπει να χρησιμοποιηθούν σε DW, Analytics κλπ. Σε αυτές τις περιπτώσεις πρέπει να γίνει data cleansing που να βγάζει τους χαρακτήρες αυτούς καθώς αν δεν γίνει προκύπτουν προβλήματα εκτέλεσης σε SSIS,ADF αλλά και στην ανάγνωση τους από εργαλεία όπως Power BI, Excel Power Pivot κλπ.

Φυσικά μπορεί να χρησμοποιηθεί και για άλλους σκοπούς που χρειάζονται την συγκεκριμένη λειτουργικότητα.

My Solution

Επειδή δεν υπάρχει κάτι συγκεκριμένο το οποίο να παρέχει την συγκεκριμένη λειτουργικότητα ο καθένας έχει φτιάξει την δικιά του. Η προσωπική μου εκδοχή είναι η παρακάτω που έχει δοκιμαστεί σκληρά όλα αυτά τα χρόνια και αποδίδει αρκετά ικανοποιητικά.

Έχω δύο εκδοχές για non-Unicode και για Unicode string.

Και στις δύο περιπτώσεις επειδή η χρήση loop ανά χαρακτήρα είναι αργή έχω κάνει χρήση της REPLACE των χαρακτήρων αυτών σε space χαρακτήρα.

SQL Script

CREATE OR ALTER FUNCTION dbo.RemoveNonPrintChars ( @str VARCHAR(MAX) )
RETURNS VARCHAR(MAX) AS
BEGIN
    
    SELECT @str=REPLACE(@str,C,' ')
    FROM
    (
        SELECT TOP(32) CHAR(CN) AS C 
        FROM 
        (
            SELECT ROW_NUMBER() OVER (ORDER BY N1.N) - 1 AS CN  
            FROM (VALUES(1),(1),(1),(1),(1),(1)) AS N1(N)
            CROSS JOIN (VALUES(1),(1),(1),(1),(1),(1)) AS N2(N)
        ) AS C
    ) AS R

    RETURN @str
END
GO

CREATE OR ALTER FUNCTION dbo.RemoveNonPrintCharsUnicode ( @str NVARCHAR(MAX) )
RETURNS NVARCHAR(MAX) AS
BEGIN
    
    SELECT @str=REPLACE(@str,C,' ')
    FROM
    (
        SELECT TOP(32) CHAR(CN) AS C 
        FROM 
        (
            SELECT ROW_NUMBER() OVER (ORDER BY N1.N) - 1 AS CN  
            FROM (VALUES(1),(1),(1),(1),(1),(1)) AS N1(N)
            CROSS JOIN (VALUES(1),(1),(1),(1),(1),(1)) AS N2(N)
        ) AS C
    ) AS R

    RETURN @str
END
GO

Antonios Chatzipavlis

Antonios Chatzipavlis

Antonios Chatzipavlis

Antonios Chatzipavlis is a highly experienced Data Solutions Consultant and Trainer. He has been working in the IT industry since 1988, holding various roles such as senior developer, IT Manager, Data & AI Solutions Architect and Consultant.

Since 1995, Antonios has focused on modern technologies and software development tools, primarily by Microsoft. He has specialized in Data & AI since 2000, with expertise in Microsoft Data Platform (SQL Server, Azure SQL Databases, Azure Synapse Analytics, Microsoft Fabric, Power BI, AI) and Databricks.

Antonios is also a Microsoft Certified Trainer (MCT) for over 25 years, has been recognized as a Microsoft Most Valuable Professional (MVP) in Data Platform since 2010 and he is in the Data Expert 40 Powerlist 2024 by Boussias. He is the co-founder and visionary behind XLYTiCA, a company dedicated to Data & AI solutions.

Episode

Task Flows in Microsoft Fabric

image

More Episodes...

Tip

Get Certified: Become a Fabric Data Engineer

More Tips...

Become a member

If you want to receive updates from us become a member to our community.

Connect

Explore

Learn

sqlschool.gr © 2010-2025 All rights reserved

This site uses cookies for operational and analytics purposes only. By continuing to browse this site, you agree to their use.