gegevens opschonen met SQL – TRIM uw witruimte

een vaak voorkomend probleem bij het importeren van gegevens in een database is ongewenste witruimte aan het begin of einde van tekenreeksen.

leidende en achterliggende witruimte kan problemen veroorzaken wanneer u dubbele records probeert te identificeren, probeert tabellen op tekenreekkolommen samen te voegen, of gewoon een bepaalde waarde opvraagt.

Gelukkig verwijdert de SQL TRIM-functie die vervelende voor-en achterliggende witruimte uit tekenreeksen.

witruimte is een teken in een tekenreeks dat de horizontale of verticale ruimte in de typografie vertegenwoordigt., Met andere woorden: tabs, lijn feeds, carriage returns en, ja, spaties.

een witruimte heeft karakterwaarde, net zoals ‘A’, ‘B’ en ‘ C ‘ een waarde hebben. We kunnen gewoon niet altijd witruimte zien als het wordt afgedrukt.

en net als elk ander teken heeft een witruimte een decimale waarde in de ASCII-tabel. Dit kleine feit komt heel handig wanneer je probeert om een witruimte karakter te identificeren met behulp van een SQL commando.,

The TRIM Function

Safari Books online has a nice snippet on the TRIM command:

ANSI SQL Standard Syntax

TRIM( FROM ]
target_string
)

The default for the first parameter, LEADING | TRAILING | BOTH , is ‘BOTH’.

The default for is a space char(32) .,

met andere woorden, als u alleen de target_string opgeeft (de enige vereiste parameter), worden alle voor-en achterspaties bijgesneden.

voorbeeld

accepteer de standaardwaarden om zowel voor-als achterliggende spatietekens te trimmen:

SELECT ' Hello World ', 
TRIM(' Hello World ');+-----------------+-------------------------+
| Hello World | TRIM(' Hello World ') |
+-----------------+-------------------------+
| Hello World | Hello World |
+-----------------+-------------------------+

opmerking: de TRIM-functie voor SQL Server-versies 2016 en lager hebben geen argumenten die de tekens specificeren om uit een tekenreeks te trimmen. Ze trimmen alleen voor – / achterspatietekens.

voorbeeld

verwijder alleen sterretekens ( * )., Merk op, hoewel slechts één ‘*’ als parameter is opgegeven, verwijdert TRIM alle voorloopsterretjes ( * ), ongeacht hoeveel er zijn.

SELECT '*** Hello World **',
TRIM(LEADING '*' FROM '*** Hello World **');+--------------------+---------------------------------------------+
| *** Hello World ** | TRIM(LEADING '*' FROM '*** Hello World **') |
+--------------------+---------------------------------------------+
| *** Hello World ** | Hello World ** |
+--------------------+---------------------------------------------+

een voorbeeld van Een witte ruimte scenario

Stel je wilt om te zetten van uw speelgoed winkel inventaris records van spreadsheets tot een RDBMS database. U laadt met succes een databasetabel uit het spreadsheet.,

u verifieert de belasting door de originele spreadsheet te vergelijken met de nieuwe database tabel. De resultaten zien er echt goed uit.

Nu wil je weten hoeveel speelgoed eenden ooit hebt ontvangen, zodat u de query op de database:

SELECT toy_name, COUNT(*)
FROM toys
WHERE toy_name = 'duck'
GROUP BY toy_name;Empty set (0.00 sec)

Wacht, wat?! Dat kan niet kloppen, geen gegevens worden teruggestuurd? Je kijkt naar de SPEELGOEDTAFEL in de database, je ziet de 11 records met toy_name = ‘duck’.,

u voert dit handige SQL-statement uit om witruimte zichtbaar te maken:

voor meer informatie over de functie vervangen, Klik hier.

Ah ha! Nu kun je zien dat alle toy_names een voorloopspatie hebben, en sommige van hen hebben andere achterliggende witruimtekarakters.,

u voert een reeks UPDATECOMMANDO ‘ s uit met behulp van de TRIM-functie voor aan-en afsluitende witruimtetekens: tabs char(9), line-feeds char(10), carriage-returns char(13), en spaties char(32).,

U voert het SELECTEREN weer te wit wordt de ruimte zichtbaar is en, pfff, ze zijn allemaal verdwenen:

Nu kunt u het tellen van je eenden met vertrouwen:

SELECT toy_name, COUNT(*)
FROM toys
WHERE toy_name = 'duck'
GROUP BY toy_name;

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *