częstym problemem z importowaniem danych do bazy danych jest niechciana Biała Spacja na początku lub końcu łańcuchów.
początkowe i końcowe białe spacje mogą powodować problemy podczas próby identyfikacji zduplikowanych rekordów, próby połączenia tabel w kolumnach łańcuchowych lub po prostu zapytania o określoną wartość.
na szczęście funkcja SQL TRIM usuwa te brzydkie początkowe i końcowe białe spacje z ciągów.
Biała spacja to znak w łańcuchu znaków, który reprezentuje poziomą lub pionową spację w typografii., Innymi słowy: tabulatory, kanały linii, zwroty karetki i, tak, spacje.
Biała spacja ma wartość znaku, podobnie jak 'A', 'B' I 'C' mają wartość. Po prostu nie zawsze widzimy białą spację po wydrukowaniu.
i tak jak każdy inny znak, Biała spacja ma wartość dziesiętną w tabeli ASCII. Ten mały fakt jest bardzo przydatny, gdy próbujesz zidentyfikować znak białej spacji za pomocą polecenia SQL.,
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)
.,
innymi słowy, jeśli podasz tylko target_string
(jedyny wymagany parametr), wszystkie początkowe i końcowe spacje zostaną przycięte.
przykład
Accept domyślnie przycina zarówno znaki początkowe, jak i końcowe:
SELECT ' Hello World ',
TRIM(' Hello World ');+-----------------+-------------------------+
| Hello World | TRIM(' Hello World ') |
+-----------------+-------------------------+
| Hello World | Hello World |
+-----------------+-------------------------+
Uwaga: funkcja przycinania dla wersji SQL Server 2016 i niższych nie zawiera argumentów określających znaki do przycinania z łańcucha. Przycinają tylko początkowe / końcowe znaki spacji.
przykład
Usuń tylko wiodące znaki gwiazdki ( * )., Zauważ, że chociaż jako parametr podano tylko jeden’*', TRIM usuwa wszystkie gwiazdki wiodące (*), niezależnie od tego, ile ich jest.
SELECT '*** Hello World **',
TRIM(LEADING '*' FROM '*** Hello World **');+--------------------+---------------------------------------------+
| *** Hello World ** | TRIM(LEADING '*' FROM '*** Hello World **') |
+--------------------+---------------------------------------------+
| *** Hello World ** | Hello World ** |
+--------------------+---------------------------------------------+
przykładowy scenariusz białej przestrzeni
wyobraź sobie, że chcesz przekonwertować rekordy zapasów w sklepie z zabawkami z arkuszy kalkulacyjnych do bazy danych RDBMS. Pomyślnie załadujesz tabelę bazy danych z arkusza kalkulacyjnego.,
sprawdzasz obciążenie porównując oryginalny arkusz kalkulacyjny z nową tabelą bazy danych. Wyniki wyglądają naprawdę dobrze.
teraz chcesz dowiedzieć się, ile kaczek zabawek zostało odebranych, więc odpytywasz bazę danych:
SELECT toy_name, COUNT(*)
FROM toys
WHERE toy_name = 'duck'
GROUP BY toy_name;Empty set (0.00 sec)
czekaj, co?! To nie może być prawda, żadnych akt nie są zwracane? Patrzysz bezpośrednio na tabelę zabawek w bazie danych, możesz zobaczyć 11 rekordów z tagiem zabawka_name = 'kaczka'.,
więc uruchamiasz to poręczne małe polecenie SQL, aby biała spacja była widoczna:
div
aby uzyskać więcej informacji na temat funkcji zamiany, kliknij tutaj.
Ah ha! Teraz możesz zobaczyć, że wszystkie nazwy toy_names mają spację wiodącą, a niektóre z nich mają inne końcowe białe znaki spacji.,
uruchamiasz serię instrukcji UPDATE przy użyciu funkcji TRIM dla początkowych i końcowych znaków spacji: tabs char(9)
, line-feeds char(10)
, carriage-returns char(13)
I spacje char(32)
.,
ponownie uruchomić wybierz sprawia, że biała przestrzeń widoczne i UV, wszystkie one zniknęły:
teraz możesz liczyć swoje sprawy z ufnością:
SELECT toy_name, COUNT(*)
FROM toys
WHERE toy_name = 'duck'
GROUP BY toy_name;