sql >> Databasteknik >  >> RDS >> Sqlserver

SQL Server TRIM-, LTRIM- och RTRIM-funktioner

TRIM-funktionen i SQL Server är utformad för att ta bort inledande och efterföljande blanksteg från en teckensträng. Ett inledande mellanslag är blanksteg som förekommer före den faktiska strängen. Ett efterföljande utrymme uppstår efter.

I den här artikeln kommer vi att undersöka TRIM-funktionen och illustrera dess användning med praktiska exempel. Så låt oss börja från grunderna.

TRIM-funktion i SQL Server

SQL TRIM är en inbyggd funktion som låter oss trimma de onödiga tecknen på båda sidor av strängen med en åtgärd. Oftast använder vi det för att ta bort blanksteg. Den här funktionen dök upp i SQL Server 2017, och nu finns den även i Azure SQL Database.

Syntaxen för SQL TRIM-funktionen är följande:

TRIM ( [ tecken FRÅN ] sträng )

  • tecken FRÅN är valfritt parameter som definierar vilka tecken vi ska ta bort. Som standard gäller denna parameter för mellanslag på båda sidor av vår sträng.
  • sträng är en obligatorisk parameter som bestämmer strängen där vi behöver bli av med mellanslag/andra onödiga tecken.

Utdata som returneras är en sträng utan de tecken som vi bestämt ska trimmas i början och slutet. Se exemplet:

SELECT TRIM( ' example ') AS Result;

Utdata är:

exempel

Som vi nämnde kan TRIM-funktionen också ta bort andra tecken. Ta en titt på exemplet där vi vill rensa bort strängen från onödiga tecken och mellanslag:

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

Utdata är:

! exempel

SQL TRIM-funktionen är tillgänglig i SQL Server från och med version 2017, men det var möjligt att göra uppgiften före den releasen också. Användare kan använda SQL LTRIM och SQL RTRIM funktioner. De finns i alla versioner av SQL Server som stöds.

LTRIM-funktion i SQL Server

SQL LTRIM funktionen tjänar till att ta bort onödiga mellanslag på vänster sida av strängen. Syntaxen är följande:

LTRIM( sträng )

sträng är den obligatoriska parametern som anger målsträngen med tecken som vi behöver trimma på vänster sida. Utdata är en kopia av den angivna strängen, men utan mellanslag i början:

SELECT LTRIM('   SQL Function');

Utdata:

‘SQL-funktion’

RTRIM-funktion i SQL Server

SQL RTRIM funktionen fungerar på samma sätt som LTRIM – skillnaden är att den tar bort mellanslag på höger sida av strängen. Syntaxen är nedan:

RTRIM(sträng)

sträng är den obligatoriska parametern som pekar på teckensträngen där vi måste ta bort de avslutande mellanslagen.

SELECT RTRIM('SQL Server   ');

Utdata:

‘SQL-server’

Använda LTRIM och RTRIM tillsammans

När vi arbetar med SQL Server behöver vi ofta bara ta bort blanksteg från ena sidan av strängen. Ändå finns det fall då vi behöver rensa snöret på båda sidor. TRIM-funktionen som vi beskrev tidigare tjänar det målet, men som vi minns är den bara tillgänglig i SQL Server 2017 och högre.

Finns det något sätt att ta bort både det inledande och efterföljande utrymmet för en sträng utan TRIM-funktionen? Ja. Vi kan använda LTRIM och RTRIM tillsammans i en fråga.

Syntaxen är:

LTRIM(RTRIM(sträng))

sträng definierar den målsträng med tecken som vi vill ta bort från onödiga mellanslag på båda sidor. Observera också att vi kan placera LTRIM och RTRIM i valfri ordning .

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

Utdata:

‘SQL-server’

Nu när vi har klargjort kärnan i alla dessa SQL-funktioner (TRIM, LTRIM och RTRIM), låt oss dyka djupare.

Varför viktiga blanksteg

Man kan fråga sig varför det kan vara viktigt att ta bort sådana utrymmen. Enkelt uttryckt beror det på att de kan utgöra en olägenhet när man till exempel jämför värden. Whitespace i sig anses vara en del av en sträng om det finns där, så det är bättre att bry sig om sådana problem.

Låt oss undersöka dessa funktioner ordentligt.

Först skapar vi en enkel tabell för de databastyper som körs i vårt företag. Vår tabell har tre kolumner. Den första är den ID-kolumn som krävs för att identifiera varje rad unikt. Den andra är DBTypeNameA . Den tredje är DBTypeNameB .

De två sista kolumnerna skiljer sig åt beroende på datatyp. DBTypeNameA använder först VARCHAR datatyp och DBTypeNameB använder CHAR datatyp.

För båda kolumnerna tilldelar vi datalängden 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

Lägg märke till skillnaden mellan dessa datatyper.

  • För VARCHAR-kolumnen allokerar inte SQL Server det utrymme för 50 tecken vi förväntar oss i kolumnen från början. Vi säger att kolumnen ska sörja för ett maximum på 50 tecken, men allokera utrymme efter behov.
  • För CHAR-kolumnen görs detta för 50 tecken varje gång en rad infogas, oavsett om det faktiska värdet behöver det utrymmet eller inte.

Att använda VARCHAR (Variable Characters) är alltså ett sätt att spara utrymme.

Efter att ha skapat tabellen fyller vi i den med koden i 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  ');

När vi fyllde på vårt bord har vi medvetet angett värden med ledande och efterföljande utrymmen. Vi kommer att använda dem i vår demonstration.

När vi frågar tabellen (se lista 3), kan vi se "förvrängningen" i data som återges i SSMS (Figur 1).

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

Denna förvrängning är synlig eftersom vi har ledande utrymmen. Efterföljande utrymmen är svårare att visualisera på detta sätt.

Frågan är Listing 4 ger en djupare titt på denna "förvrängning". Den introducerar funktionerna LEN och DATALENGTH:

  • LEN() returnerar antalet tecken i en sträng exklusive efterföljande mellanslag.
  • DATALENGTH() returnerar antalet byte som används för att representera ett uttryck.
-- 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;

Figur 2 visar variationer i längd för sådana uttryck som "SQL Server", "Oracle" och "MySQL" på grund av de inledande och efterföljande utrymmena.

Detta innebär att dessa uttryck inte är desamma när det gäller SQL Server-frågemotorn. Vi kan se detta tydligt genom att köra koden i Listing 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 fältet representerar utdata från funktionen DATALENGTH() i kolumnen CHAR. Därför är en konsekvens av denna skillnad mellan "SQL Server" och " SQL Server " frågeresultatet som visas i figur 3.

Vi ser att även om vi har tre rader med varje databastyp, returnerar våra frågor bara en av varje eftersom inledande och efterföljande mellanslag skiljer värdena åt.

Lösa problemet

Att få korrekta resultat för frågan i Lista 5 är genomförbart och enkelt. Vi behöver SQL Server TRIM()-funktionen som visas i Lista 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';

Utan denna TRIM()-funktion kan vi få fel resultat i vissa scenarier.

Vi kan ta detta vidare genom att ladda data i en separat tabell, förutsatt att vi ville lösa problemet permanent (en sorts datarensning).

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

Jämför resultaten från listning 7 (figur 5) med resultaten från listning 3 (figur 1). Vi kan också skapa en annan tabell med denna resultatuppsättning för att rensa upp data (se lista 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;

På så sätt kan vi lösa våra problem permanent och ta bort överkostnaderna för att köra funktioner varje gång vi behöver extrahera data från vår tabell.

Slutsats

SQL Server TRIM()-funktionerna kan användas för att ta bort både inledande och efterföljande mellanslag från strängar. LTRIM och RTRIM är två varianter av denna funktion som fokuserar på ledande (VÄNSTER) respektive efterföljande (HÖGER) utrymmen.

Vi kan använda TRIM() i farten för att städa upp resultatuppsättningen och säkerställa att vi får rätt resultatuppsättning. Vi kan också använda den för att ta bort mellanslag samtidigt som vi flyttar data snyggt från en tabell till en annan.

Relaterade artiklar

Hur man analyserar strängar som ett proffs med SQL SUBSTRING()-funktionen?


  1. Extrahera månaden från ett datum i PostgreSQL

  2. SQL Server 2005 Använder DateAdd för att lägga till en dag till ett datum

  3. Oracle INSERT i två tabeller i en fråga

  4. Använda roller som är nya i MySQL 8