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: