rengöring av Data med SQL – trimma ditt vita utrymme

ett vanligt problem med att importera data till en databas är oönskat vitt utrymme i början eller slutet av strängar.

inledande och avslutande vitt utrymme kan orsaka problem när du försöker identifiera dubbla poster, försöka gå med i tabeller på strängkolumner, eller helt enkelt fråga efter ett visst värde.

lyckligtvis tar SQL TRIM-funktionen bort det irriterande ledande och efterföljande vita utrymmet från strängar.

vitt utrymme är ett tecken i en sträng som representerar horisontellt eller vertikalt utrymme i typografi., Med andra ord: flikar, linjeflöden, vagnreturer och, ja, mellanslag.

ett vitt utrymme har teckenvärde, precis som ”A”, ” B ” och ” C ” har ett värde. Vi kan bara inte alltid se vitt utrymme när de skrivs ut.

och precis som alla andra tecken har ett vitt utrymme ett decimalvärde i ASCII-tabellen. Detta lilla faktum är ganska praktiskt när du försöker identifiera ett vitt utrymme tecken med hjälp av ett SQL-kommando.,

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) .,

med andra ord, om du bara anger target_string (den enda parametern som krävs), trimmas alla inledande och avslutande utrymmen.

exempel

Acceptera standardvärden för att trimma både inledande och avslutande mellanslagstecken:

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

Obs! TRIM-funktionen för SQL Server-versioner 2016 och lägre har inga argument som anger tecken att trimma från en sträng. De trimmar bara Ledande / avslutande mellanslagstecken.

exempel

Ta bort endast Ledande asterisktecken ( * )., Observera, även om endast en ” * ” anges som parameter, TRIM tar bort alla ledande asterisker ( * ), oavsett hur många det finns.

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

ett exempel white space scenario

tänk dig att du vill konvertera dina toy shop lagerposter från kalkylblad till en RDBMS-databas. Du laddar framgångsrikt en databastabell från kalkylbladet.,

du verifierar belastningen genom att jämföra det ursprungliga kalkylarket med den nya databastabellen. Resultaten ser riktigt bra ut.

nu vill du hitta hur många toy ducks som någonsin har tagits emot, så du frågar databasen:

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

vänta, vad?! Det kan inte vara rätt, inga poster returneras? Du tittar precis vid TOYS-tabellen i databasen, Du kan se de 11 posterna med toy_name = ’duck’.,

så du kör denna praktiska lilla SQL-sats för att göra vitt utrymme synligt:

För mer information om funktionen ersätt, klicka här.

Ah ha! Nu kan du se alla toy_names har ett ledande utrymme, och några av dem har andra efterföljande vita mellanslagstecken.,

Du kör en serie uppdateringssatser med TRIMFUNKTIONEN för att leda och följa tecken i vitt utrymme: flikarchar(9), line-feedschar(10), carriage-returnschar(13) och mellanslagchar(32).,

Du kör välj igen för att göra vitt utrymme synligt och, phew, de är alla borta:

Nu kan du räkna dina ankor med tillförsikt:

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

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *