Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Funzioni TRIM, LTRIM e RTRIM di SQL Server

La funzione TRIM di SQL Server è progettata per rimuovere gli spazi vuoti iniziali e finali da una stringa di caratteri. Uno spazio iniziale è uno spazio bianco che si trova prima della stringa effettiva. Dopo si verifica uno spazio finale.

In questo articolo, esamineremo la funzione TRIM e illustreremo il suo utilizzo con esempi pratici. Quindi, partiamo dalle basi.

Funzione TRIM in SQL Server

SQL TRIM è una funzione incorporata che ci consente di tagliare i caratteri non necessari su entrambi i lati della stringa con un'unica azione. Più frequentemente, lo usiamo per rimuovere gli spazi bianchi. Questa funzione è stata visualizzata in SQL Server 2017 e ora è presente anche nel database SQL di Azure.

La sintassi della funzione SQL TRIM è la seguente:

TRIM ( [ caratteri DA ] stringa )

  • personaggi DA è un opzionale parametro che definisce quali caratteri dobbiamo eliminare. Per impostazione predefinita, questo parametro si applica agli spazi su entrambi i lati della nostra stringa.
  • stringa è un obbligatorio parametro che determina la stringa in cui dobbiamo eliminare spazi/altri caratteri non necessari.

L'output restituito è una stringa senza quei caratteri che abbiamo stabilito di essere tagliati all'inizio e alla fine. Vedi l'esempio:

SELECT TRIM( ' example ') AS Result;

L'output è:

esempio

Come accennato, la funzione TRIM può rimuovere anche altri caratteri. Dai un'occhiata all'esempio in cui vogliamo ripulire la stringa da caratteri e spazi non necessari:

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

L'output è:

! esempio

La funzione SQL TRIM è disponibile in SQL Server a partire dalla versione 2017, ma era possibile eseguire l'attività anche prima di tale versione. Gli utenti possono applicare SQL LTRIM e SQL RTRIM funzioni. Sono presenti in tutte le versioni supportate di SQL Server.

Funzione LTRIM in SQL Server

SQL LTRIM la funzione serve a rimuovere gli spazi non necessari sul lato sinistro della stringa. La sintassi è la seguente:

LTRIM( stringa )

stringa è il parametro obbligatorio che specifica la stringa di caratteri di destinazione che dobbiamo tagliare sul lato sinistro. L'output è una copia della stringa specificata, ma senza gli spazi all'inizio:

SELECT LTRIM('   SQL Function');

Uscita:

'Funzione SQL'

Funzione RTRIM in SQL Server

SQL RTRIM La funzione funziona allo stesso modo di LTRIM:la differenza è che rimuove gli spazi sul lato destro della stringa. La sintassi è la seguente:

RTRIM(stringa)

stringa è il parametro obbligatorio che punta alla stringa di caratteri in cui è necessario rimuovere gli spazi finali.

SELECT RTRIM('SQL Server   ');

Uscita:

"SQL Server"

Utilizzare LTRIM e RTRIM insieme

Lavorando con SQL Server, spesso è necessario rimuovere gli spazi solo da un lato della stringa. Tuttavia, ci sono casi in cui è necessario cancellare la stringa su entrambi i lati. La funzione TRIM che abbiamo descritto in precedenza serve a questo obiettivo, ma, come ricordiamo, è disponibile solo in SQL Server 2017 e versioni successive.

C'è un modo per rimuovere sia gli spazi iniziali che finali per una stringa senza la funzione TRIM? Sì. Possiamo utilizzare LTRIM e RTRIM insieme in un'unica query.

La sintassi è:

LTRIM(RTRIM(stringa))

stringa definisce quella stringa di caratteri di destinazione che vogliamo cancellare da spazi non necessari su entrambi i lati. Si noti inoltre che possiamo mettere LTRIM e RTRIM in qualsiasi ordine .

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

Uscita:

"SQL Server"

Ora che abbiamo chiarito l'essenza di tutte queste funzioni SQL (TRIM, LTRIM e RTRIM), approfondiamo.

Perché gli spazi bianchi sono importanti

Ci si potrebbe chiedere perché potrebbe essere importante rimuovere tali spazi. In parole povere, è perché possono costituire una seccatura quando, ad esempio, si confrontano i valori. Lo spazio bianco stesso è considerato parte di una stringa se è presente, quindi è meglio occuparsi di tali problemi.

Esaminiamo correttamente queste funzioni.

Innanzitutto, creiamo una semplice tabella per i tipi di database eseguiti nella nostra azienda. La nostra tabella ha tre colonne. La prima è la colonna ID richiesta per identificare ogni riga in modo univoco. Il secondo è DBTypeNameA . Il terzo è il DBTypeNameB .

Le ultime due colonne differiscono in base al tipo di dati. DBTypeNameA utilizza prima il VARCHAR tipo di dati e DBTypeNameB utilizza il CHAR tipo di dati.

Per entrambe le colonne, assegniamo la lunghezza dei dati di 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

Nota la differenza tra questi tipi di dati.

  • Per la colonna VARCHAR, SQL Server non alloca lo spazio per 50 caratteri previsto nella colonna ab initio. Diciamo che la colonna dovrebbe prevedere un massimo di 50 caratteri, ma alloca spazio secondo necessità.
  • Per la colonna CHAR, tale disposizione prevede 50 caratteri ogni volta che viene inserita una riga, indipendentemente dal fatto che il valore effettivo necessiti o meno di tale spazio.

Pertanto, l'utilizzo di VARCHAR (caratteri variabili) è un modo per risparmiare spazio.

Dopo aver creato la tabella, la popolamo usando il codice nel Listato 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  ');

Durante la compilazione della nostra tabella, abbiamo inserito deliberatamente valori con spazi iniziali e finali. Li useremo nella nostra dimostrazione.

Quando interroghiamo la tabella (vedi Listato 3), possiamo vedere la "distorsione" nei dati come renderizzati in SSMS (Figura 1).

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

Questa distorsione è visibile perché abbiamo spazi principali. Gli spazi finali sono più difficili da visualizzare in questo modo.

La query nel Listato 4 fornisce uno sguardo più approfondito a questa "distorsione". Introduce le funzioni LEN e DATALENGTH:

  • LEN() restituisce il numero di caratteri in una stringa esclusi gli spazi finali.
  • DATALENGTH() restituisce il numero di byte utilizzati per rappresentare un'espressione.
-- 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;

La figura 2 mostra le variazioni di lunghezza per espressioni come "SQL Server", "Oracle" e "MySQL" dovute agli spazi iniziali e finali.

Ciò implica che queste espressioni non sono le stesse per quanto riguarda il motore di query di SQL Server. Possiamo vederlo chiaramente eseguendo il codice nel Listato 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';

Il DataLenCharCol campo rappresenta l'output della funzione DATALENGTH() sulla colonna CHAR. Pertanto, una conseguenza di questa disparità tra "SQL Server" e "SQL Server" è il risultato della query visualizzato nella Figura 3.

Vediamo che anche se abbiamo tre righe per ogni tipo di database, le nostre query ne restituiscono solo una perché gli spazi iniziali e finali distinguono i valori.

Risolvere il problema

Ottenere risultati corretti per la query nel Listato 5 è fattibile e facile. Abbiamo bisogno della funzione TRIM() di SQL Server come mostrato nel Listato 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';

Senza questa funzione TRIM(), potremmo ottenere risultati errati in alcuni scenari.

Possiamo andare oltre caricando i dati in una tabella separata, supponendo di voler risolvere il problema in modo permanente (una sorta di pulizia dei dati).

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

Confronta i risultati del Listato 7 (Figura 5) con quelli del Listato 3 (Figura 1). Possiamo anche creare un'altra tabella con questo set di risultati per ripulire i dati (vedi Listato 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;

In questo modo, possiamo risolvere i nostri problemi in modo permanente ed eliminare il sovraccarico dell'esecuzione di funzioni ogni volta che dobbiamo estrarre dati dalla nostra tabella.

Conclusione

Le funzioni TRIM() di SQL Server possono essere utilizzate per rimuovere gli spazi iniziali e finali dalle stringhe. LTRIM e RTRIM sono due varianti di questa funzione che si concentrano rispettivamente sugli spazi iniziali (SINISTRA) e finali (DESTRA).

Possiamo applicare TRIM() al volo per riordinare il set di risultati e garantire di ottenere il set di risultati corretto. Inoltre, possiamo usarlo per rimuovere gli spazi mentre spostiamo i dati ordinatamente da una tabella all'altra.

Articoli correlati

Come analizzare le stringhe come un professionista utilizzando la funzione SQL SUBSTRING()?