Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

SQL Server TRIM-, LTRIM- und RTRIM-Funktionen

Die TRIM-Funktion von SQL Server wurde entwickelt, um führende und nachgestellte Leerzeichen aus einer Zeichenfolge zu entfernen. Ein führendes Leerzeichen ist ein Leerzeichen, das vor der eigentlichen Zeichenfolge steht. Danach folgt ein abschließendes Leerzeichen.

In diesem Artikel werden wir die TRIM-Funktion untersuchen und ihre Verwendung anhand praktischer Beispiele veranschaulichen. Beginnen wir also mit den Grundlagen.

TRIM-Funktion in SQL Server

SQL TRIM ist eine integrierte Funktion, die es uns ermöglicht, die unnötigen Zeichen auf beiden Seiten der Zeichenfolge mit einer Aktion zu kürzen. Am häufigsten verwenden wir es, um Leerzeichen zu entfernen. Diese Funktion erschien in SQL Server 2017 und ist jetzt auch in Azure SQL-Datenbank vorhanden.

Die Syntax der SQL TRIM-Funktion lautet wie folgt:

TRIM ( [ Zeichen FROM ] Zeichenfolge )

  • Zeichen VON ist optional Parameter, der definiert, welche Zeichen gelöscht werden sollen. Standardmäßig gilt dieser Parameter für Leerzeichen auf beiden Seiten unserer Zeichenfolge.
  • Zeichenfolge ist obligatorisch Parameter, der die Zeichenfolge bestimmt, in der wir Leerzeichen/andere unnötige Zeichen entfernen müssen.

Die zurückgegebene Ausgabe ist eine Zeichenfolge ohne die Zeichen, von denen wir festgestellt haben, dass sie am Anfang und am Ende gekürzt werden. Siehe Beispiel:

SELECT TRIM( ' example ') AS Result;

Die Ausgabe ist:

Beispiel

Wie bereits erwähnt, kann die TRIM-Funktion auch andere Zeichen entfernen. Schauen Sie sich das Beispiel an, in dem wir den String von unnötigen Zeichen und Leerzeichen bereinigen wollen:

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

Die Ausgabe ist:

! Beispiel

Die SQL TRIM-Funktion ist in SQL Server ab Version 2017 verfügbar, aber es war auch möglich, die Aufgabe vor dieser Version auszuführen. Benutzer könnten SQL LTRIM anwenden und SQL RTRIM Funktionen. Sie sind in allen unterstützten Versionen von SQL Server vorhanden.

LTRIM-Funktion in SQL Server

Der SQL-LTRIM Die Funktion dient dazu, unnötige Leerzeichen auf der linken Seite der Zeichenfolge zu entfernen. Die Syntax lautet wie folgt:

LTRIM( Zeichenfolge )

Zeichenfolge ist der obligatorische Parameter, der die Zielzeichenfolge angibt, die wir auf der linken Seite kürzen müssen. Die Ausgabe ist eine Kopie des angegebenen Strings, jedoch ohne die Leerzeichen am Anfang:

SELECT LTRIM('   SQL Function');

Ausgabe:

‘SQL-Funktion’

RTRIM-Funktion in SQL Server

Der SQL-RTRIM Die Funktion funktioniert genauso wie LTRIM – der Unterschied besteht darin, dass sie Leerzeichen auf der rechten Seite der Zeichenfolge entfernt. Die Syntax ist unten:

RTRIM(Zeichenfolge)

Zeichenfolge ist der erforderliche Parameter, der auf die Zeichenfolge zeigt, in der wir die abschließenden Leerzeichen entfernen müssen.

SELECT RTRIM('SQL Server   ');

Ausgabe:

„SQL-Server“

LTRIM und RTRIM zusammen verwenden

Wenn wir mit SQL Server arbeiten, müssen wir oft nur Leerzeichen von einer Seite der Zeichenfolge entfernen. Dennoch gibt es Fälle, in denen wir die Schnur auf beiden Seiten löschen müssen. Die zuvor beschriebene TRIM-Funktion dient diesem Ziel, aber wie wir uns erinnern, ist sie nur in SQL Server 2017 und höher verfügbar.

Gibt es eine Möglichkeit, sowohl die führenden als auch die nachgestellten Leerzeichen für eine Zeichenfolge ohne die TRIM-Funktion zu entfernen? Ja. Wir können LTRIM und RTRIM zusammen in einer Abfrage verwenden.

Die Syntax lautet:

LTRIM(RTRIM(Zeichenfolge))

Zeichenfolge definiert die Zielzeichenfolge, die wir auf beiden Seiten von unnötigen Leerzeichen befreien möchten. Beachten Sie auch, dass wir LTRIM und RTRIM in beliebiger Reihenfolge platzieren können .

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

Ausgabe:

„SQL-Server“

Nachdem wir nun die Essenz all dieser SQL-Funktionen (TRIM, LTRIM und RTRIM) geklärt haben, lassen Sie uns tiefer eintauchen.

Warum Leerzeichen wichtig sind

Man könnte fragen, warum es wichtig sein könnte, solche Leerzeichen zu entfernen. Vereinfacht gesagt, weil sie beispielsweise beim Vergleich von Werten stören können. Whitespace selbst wird als Teil einer Zeichenfolge betrachtet, wenn es vorhanden ist, daher ist es besser, sich um solche Probleme zu kümmern.

Lassen Sie uns diese Funktionen genauer untersuchen.

Zunächst erstellen wir eine einfache Tabelle für die in unserem Unternehmen betriebenen Datenbanktypen. Unsere Tabelle hat drei Spalten. Die erste ist die ID-Spalte, die erforderlich ist, um jede Zeile eindeutig zu identifizieren. Der zweite ist DBTypeNameA . Der dritte ist der DBTypeNameB .

Die letzten beiden Spalten unterscheiden sich durch den Datentyp. DBTypeNameA verwendet zuerst den VARCHAR Datentyp und DBTypeNameB verwendet das CHAR Datentyp.

Für beide Spalten vergeben wir die Datenlänge von 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

Beachten Sie den Unterschied zwischen diesen Datentypen.

  • Für die VARCHAR-Spalte weist SQL Server nicht den Platz für 50 Zeichen zu, den wir in der Spalte von Anfang an erwarten. Wir sagen, dass die Spalte ein Maximum vorsehen sollte von 50 Zeichen, aber weisen Sie Platz nach Bedarf zu.
  • Für die CHAR-Spalte werden jedes Mal, wenn eine Zeile eingefügt wird, 50 Zeichen bereitgestellt, unabhängig davon, ob der tatsächliche Wert diesen Platz benötigt oder nicht.

Daher ist die Verwendung von VARCHAR (Variable Characters) eine Möglichkeit, Platz zu sparen.

Nachdem wir die Tabelle erstellt haben, füllen wir dieselbe mit dem Code in Listing 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  ');

Beim Füllen unserer Tabelle haben wir bewusst Werte mit führenden und abschließenden Leerzeichen eingegeben. Wir werden sie in unserer Demonstration verwenden.

Wenn wir die Tabelle abfragen (siehe Listing 3), können wir die „Verzerrung“ in den Daten sehen, wie sie in SSMS gerendert werden (Abbildung 1).

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

Diese Verzerrung ist sichtbar, weil wir führende Leerzeichen haben. Nachfolgende Leerzeichen sind auf diese Weise schwieriger zu visualisieren.

Die Abfrage in Listing 4 bietet einen tieferen Einblick in diese „Verzerrung“. Es führt die Funktionen LEN und DATALENGTH ein:

  • LEN() gibt die Anzahl der Zeichen in einer Zeichenkette ohne nachgestellte Leerzeichen zurück.
  • DATALENGTH() gibt die Anzahl der Bytes zurück, die zur Darstellung eines Ausdrucks verwendet werden.
-- 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;

Abbildung 2 zeigt uns Längenunterschiede für Ausdrücke wie „SQL Server“, „Oracle“ und „MySQL“ aufgrund der führenden und abschließenden Leerzeichen.

Dies impliziert, dass diese Ausdrücke in Bezug auf die SQL Server-Abfrage-Engine nicht identisch sind. Wir können dies deutlich sehen, indem wir den Code in Listing 5 ausführen.

-- 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';

Die DataLenCharCol Das Feld stellt die Ausgabe der Funktion DATALENGTH() in der Spalte CHAR dar. Daher ist eine Folge dieser Diskrepanz zwischen „SQL Server“ und „SQL Server“ das in Abbildung 3 dargestellte Abfrageergebnis.

Wir sehen, dass, obwohl wir drei Zeilen mit jedem Datenbanktyp haben, unsere Abfragen nur eine von jeder zurückgeben, weil führende und nachgestellte Leerzeichen die Werte unterscheiden.

Das Problem lösen

Korrekte Ergebnisse für die Abfrage in Listing 5 zu erhalten, ist machbar und einfach. Wir brauchen die TRIM()-Funktion von SQL Server, wie in Listing 6 gezeigt.

-- 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';

Ohne diese TRIM()-Funktion könnten wir in einigen Szenarien falsche Ergebnisse erhalten.

Wir können dies weiterführen, indem wir Daten in eine separate Tabelle laden, vorausgesetzt, wir wollten das Problem dauerhaft lösen (eine Art Datenbereinigung).

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

Vergleichen Sie die Ergebnisse von Listing 7 (Abbildung 5) mit denen von Listing 3 (Abbildung 1). Wir können auch eine weitere Tabelle mit dieser Ergebnismenge erstellen, um die Daten zu bereinigen (siehe 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;

Auf diese Weise können wir unsere Probleme dauerhaft lösen und den Aufwand für die Ausführung von Funktionen jedes Mal beseitigen, wenn wir Daten aus unserer Tabelle extrahieren müssen.

Schlussfolgerung

Die TRIM()-Funktionen von SQL Server können verwendet werden, um sowohl führende als auch nachgestellte Leerzeichen aus Zeichenfolgen zu entfernen. LTRIM und RTRIM sind zwei Varianten dieser Funktion, die sich auf führende (LEFT) bzw. nachfolgende (RIGHT) Leerzeichen konzentrieren.

Wir können TRIM() on the fly anwenden, um die Ergebnismenge aufzuräumen und sicherzustellen, dass die richtige Ergebnismenge erhalten wird. Außerdem können wir damit Leerzeichen entfernen, während wir die Daten sauber von einer Tabelle in eine andere verschieben.

Verwandte Artikel

Wie parst man Strings wie ein Profi mit der SQL-Funktion SUBSTRING()?