Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Funkcje TRIM, LTRIM i RTRIM programu SQL Server

Funkcja TRIM programu SQL Server służy do usuwania wiodących i końcowych spacji z ciągu znaków. Wiodąca spacja to biały znak, który występuje przed rzeczywistym ciągiem. Końcowa spacja występuje po.

W tym artykule przyjrzymy się funkcji TRIM i zilustrujemy jej zastosowanie na praktycznych przykładach. Zacznijmy więc od podstaw.

Funkcja TRIM w serwerze SQL

SQL TRIM to wbudowana funkcja, która pozwala nam przyciąć niepotrzebne znaki po obu stronach ciągu za pomocą jednej akcji. Najczęściej używamy go do usuwania spacji. Ta funkcja pojawiła się w SQL Server 2017, a teraz jest również obecna w Azure SQL Database.

Składnia funkcji SQL TRIM jest następująca:

TRIM ( [ znaki Z ] ciąg )

  • znaki OD jest opcjonalnym parametr określający, które znaki powinniśmy usunąć. Domyślnie ten parametr dotyczy spacji po obu stronach naszego ciągu.
  • ciąg jest obowiązkowe parametr, który określa ciąg, z którego musimy pozbyć się spacji/innych niepotrzebnych znaków.

Zwracany wynik to łańcuch bez tych znaków, które określiliśmy jako przycięte na początku i na końcu. Zobacz przykład:

SELECT TRIM( ' example ') AS Result;

Dane wyjściowe to:

przykład

Jak wspomnieliśmy, funkcja TRIM może również usuwać inne znaki. Spójrz na przykład, w którym chcemy wyczyścić ciąg z niepotrzebnych znaków i spacji:

SELECT TRIM( '.,# ' FROM '# ! example .') AS Result;

Dane wyjściowe to:

! przykład

Funkcja SQL TRIM jest dostępna w SQL Server począwszy od wersji 2017, ale można było wykonać to zadanie również przed tą wersją. Użytkownicy mogą zastosować SQL LTRIM i SQL RTRIM Funkcje. Są obecne we wszystkich obsługiwanych wersjach SQL Server.

Funkcja LTRIM w serwerze SQL

SQL LTRIM funkcja służy do usuwania zbędnych spacji po lewej stronie ciągu. Składnia jest następująca:

LTRIM(ciąg)

ciąg jest obowiązkowym parametrem, który określa docelowy ciąg znaków, który musimy przyciąć po lewej stronie. Wynikiem jest kopia określonego ciągu, ale bez spacji na początku:

SELECT LTRIM('   SQL Function');

Wyjście:

„Funkcja SQL”

Funkcja RTRIM w serwerze SQL

SQL RTRIM funkcja działa tak samo jak LTRIM – różnica polega na tym, że usuwa spacje po prawej stronie napisu. Składnia jest poniżej:

RTRIM(ciąg)

ciąg jest wymaganym parametrem wskazującym ciąg znaków, w którym musimy usunąć końcowe spacje.

SELECT RTRIM('SQL Server   ');

Wyjście:

„Serwer SQL”

Łączne używanie LTRIM i RTRIM

Pracując z SQL Server, często musimy usuwać spacje tylko z jednej strony ciągu. Zdarzają się jednak przypadki, gdy musimy oczyścić sznurek po obu stronach. Funkcja TRIM, którą opisaliśmy wcześniej, służy temu celowi, ale, jak pamiętamy, jest dostępna tylko w SQL Server 2017 i nowszych.

Czy istnieje sposób na usunięcie spacji wiodących i końcowych dla jednego ciągu bez funkcji TRIM? Tak. Możemy użyć LTRIM i RTRIM razem w jednym zapytaniu.

Składnia to:

LTRIM(RTRIM(ciąg))

ciąg definiuje docelowy ciąg znaków, który chcemy usunąć z niepotrzebnych spacji po obu stronach. Zauważ też, że możemy umieścić LTRIM i RTRIM w dowolnej kolejności .

SELECT LTRIM(RTRIM('   SQL Server  '));

Wyjście:

„Serwer SQL”

Teraz, gdy wyjaśniliśmy istotę wszystkich tych funkcji SQL (TRIM, LTRIM i RTRIM), zanurkujmy głębiej.

Dlaczego spacje są ważne

Można by zapytać, dlaczego usuwanie takich przestrzeni może być ważne. W uproszczeniu dzieje się tak dlatego, że mogą być uciążliwe przy np. porównywaniu wartości. Sama spacja jest uważana za część ciągu, jeśli tam jest, dlatego lepiej zajmować się takimi problemami.

Zbadajmy te funkcje poprawnie.

Najpierw tworzymy prostą tabelę dla typów baz danych uruchamianych w naszym przedsiębiorstwie. Nasza tabela ma trzy kolumny. Pierwsza z nich to kolumna ID wymagana do jednoznacznej identyfikacji każdego wiersza. Drugi to DBTypeNameA . Trzeci to DBTypeNameB .

Dwie ostatnie kolumny różnią się typem danych. DBTypeNameA najpierw używa VARCHAR typ danych i DBTypeNameB używa CHAR typ danych.

Dla obu kolumn przypisujemy długość danych 50.

- Listing 1: Create a Simple Table
USE DB2
GO
CREATE TABLE DBType (
ID INT IDENTITY(1,1)
,DBTypeNameA VARCHAR (50)
,DBTypeNameB CHAR (50))

GO

Zwróć uwagę na różnicę między tymi typami danych.

  • W przypadku kolumny VARCHAR SQL Server nie przydziela miejsca na 50 znaków, których oczekujemy w kolumnie ab initio. Mówimy, że kolumna powinna przewidywać maksimum 50 znaków, ale w razie potrzeby przydziel miejsce.
  • W przypadku kolumny CHAR przewidziano 50 znaków za każdym razem, gdy wstawiany jest wiersz, bez względu na to, czy rzeczywista wartość wymaga tej spacji, czy nie.

Dlatego używanie VARCHAR (znaków zmiennych) jest sposobem na zaoszczędzenie miejsca.

Po utworzeniu tabeli wypełniamy ją za pomocą kodu z Listingu 2.

-- Listing 2: Populate the Table USE DB2 GO INSERT INTO DBType VALUES ('SQL Server','SQL Server'); INSERT INTO DBType VALUES (' SQL Server ',' SQL Server '); INSERT INTO DBType VALUES (' SQL Server ',' SQL Server '); INSERT INTO DBType VALUES ('Oracle','Oracle'); INSERT INTO DBType VALUES (' Oracle ',' Oracle '); INSERT INTO DBType VALUES (' Oracle ',' Oracle '); INSERT INTO DBType VALUES ('MySQL','MySQL'); INSERT INTO DBType VALUES (' MySQL ',' MySQL '); INSERT INTO DBType VALUES (' MySQL ',' MySQL ');

Podczas wypełniania naszej tabeli celowo wprowadziliśmy wartości ze spacjami wiodącymi i końcowymi. Wykorzystamy je w naszej demonstracji.

Kiedy wysyłamy zapytanie do tabeli (patrz Listing 3), możemy zobaczyć „zniekształcenie” w danych renderowanych w SSMS (Rysunek 1).

-- Listing 3: Query the Table
USE DB2
GO
SELECT * FROM DBType;

To zniekształcenie jest widoczne, ponieważ mamy wiodące przestrzenie. W ten sposób trudniej jest zwizualizować końcowe przestrzenie.

Zapytanie to Listing 4 zapewnia głębsze spojrzenie na to „zniekształcenie”. Wprowadza funkcje LEN i DATALENGTH:

  • LEN() zwraca liczbę znaków w ciągu bez spacji końcowych.
  • DATALENGTH() zwraca liczbę bajtów użytych do reprezentowania wyrażenia.
-- Listing 4: Query the Table
USE DB2
GO
SELECT DBTypeNameA
, LEN(DBTypeNameA) LenVarcharCol
, DATALENGTH(DBTypeNameA) DataLenVarcharCol
, DBTypeNameB
, LEN(DBTypeNameB) LenCharCol
, DATALENGTH(DBTypeNameB) DataLenCharCol
FROM DBType;

Rysunek 2 pokazuje różnice w długości takich wyrażeń jak „SQL Server”, „Oracle” i „MySQL” ze względu na spacje wiodące i końcowe.

Oznacza to, że te wyrażenia nie są takie same, jeśli chodzi o silnik zapytań SQL Server. Możemy to wyraźnie zobaczyć, uruchamiając kod z Listingu 5.

-- Listing 5: Query for Specific 
USE DB2
GO
SELECT * FROM DBType WHERE DBTypeNameA='SQL Server';
SELECT * FROM DBType WHERE DBTypeNameA='Oracle';
SELECT * FROM DBType WHERE DBTypeNameA='MySQL';

DataLenCharCol pole reprezentuje dane wyjściowe funkcji DATALENGTH() w kolumnie CHAR. Dlatego jedną z konsekwencji tej rozbieżności między „SQL Server” i „SQL Server” jest wynik zapytania przedstawiony na rysunku 3.

Widzimy, że chociaż mamy trzy wiersze z każdym typem bazy danych, nasze zapytania zwracają tylko po jednym z nich, ponieważ spacje wiodące i końcowe rozróżniają wartości.

Rozwiązywanie problemu

Uzyskanie poprawnych wyników zapytania z Listingu 5 jest wykonalne i łatwe. Potrzebujemy funkcji TRIM() SQL Server, jak pokazano na Listingu 6.

-- Listing 6: Query for Specific 
USE DB2
GO
SELECT * FROM DBType WHERE TRIM(DBTypeNameA)='SQL Server';
SELECT * FROM DBType WHERE TRIM(DBTypeNameA)='Oracle';
SELECT * FROM DBType WHERE TRIM(DBTypeNameA)='MySQL';

Bez tej funkcji TRIM() moglibyśmy uzyskać błędne wyniki w niektórych sytuacjach.

Możemy pójść dalej, ładując dane do osobnej tabeli, zakładając, że chcemy rozwiązać problem na stałe (rodzaj czyszczenia danych).

-- Listing 7: Query for Specific 
USE DB2
GO
SELECT ID, TRIM(DBTypeNameA) DBTypeNameA, TRIM(DBTypeNameB) DBTypeNameB FROM DBType;

Porównaj wyniki z Listu 7 (Rysunek 5) z wynikami Listu 3 (Rysunek 1). Możemy również utworzyć kolejną tabelę z tym zestawem wyników, aby wyczyścić dane (patrz Listing 8).

-- Listing 8: Create a New Table (Data Cleanup)
USE DB2
GO
SELECT ID, TRIM(DBTypeNameA) DBTypeNameA, TRIM(DBTypeNameB) DBTypeNameB INTO DBType_New FROM DBType;

SELECT * FROM DBType_New;

W ten sposób możemy trwale rozwiązać nasze problemy i usunąć obciążenie związane z wykonywaniem funkcji za każdym razem, gdy musimy wyodrębnić dane z naszej tabeli.

Wniosek

Funkcje SQL Server TRIM() mogą służyć do usuwania spacji wiodących i końcowych z ciągów. LTRIM i RTRIM to dwa warianty tej funkcji, które skupiają się odpowiednio na spacjach wiodących (LEFT) i końcowych (RIGHT).

Możemy zastosować TRIM() w locie, aby uporządkować zestaw wyników i zapewnić otrzymanie prawidłowego zestawu wyników. Możemy go również użyć do usuwania spacji, jednocześnie przenosząc dane z jednej tabeli do drugiej.

Powiązane artykuły

Jak analizować ciągi znaków jak profesjonalista za pomocą funkcji SQL SUBSTRING()?


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Uzyskaj bieżący identyfikator logowania w SQL Server (T-SQL)

  2. Funkcja IndexOf w T-SQL

  3. EXEC sp_executesql z wieloma parametrami

  4. scope_identity a ident_current

  5. Jak mogę zapytać o wartość w kolumnie SQL Server XML?