Come tagliare una stringa in SQL Server?


132

In SQL Server 2017 è possibile utilizzare questa sintassi, ma non nelle versioni precedenti:

SELECT Name = TRIM(Name) FROM dbo.Customer;

Risposte:


239
SELECT LTRIM(RTRIM(Names)) AS Names FROM Customer

3
questo è il modo più semplice per farlo, ricorda solo di fare in modo che la tua colonna venga restituita
Miglia

1
@Miles: ho aggiunto l'alias per completezza.
Ben Hoffstein,

2
Capisco che questo è il modo giusto di utilizzare il taglio del valore. ma puoi spiegare perché usare sia LTRIM che RTRIM quando avremmo potuto usare solo TRIM?
Code Buster,

6
@CodeBuster: SQL Server non ha la funzione TRIM definita, nemmeno nella versione 2014.
Alextansc,

7
SQL Server ora ha TRIM nella versione 2017. docs.microsoft.com/en-us/sql/t-sql/functions/trim-transact-sql
goodeye

64

Per tagliare a destra, utilizzare:

SELECT RTRIM(Names) FROM Customer

Per tagliare a sinistra, utilizzare:

SELECT LTRIM(Names) FROM Customer

Per tagliare su entrambi i lati, utilizzare:

SELECT LTRIM(RTRIM(Names)) FROM Customer

5
Per inciso, quale possibile ragione potrebbe avere Microsoft per includere una funzione LTRIM e RTRIM senza un TRIM? È peculiare.
Ben Hoffstein,

Perché è ridondante. Puoi ottenere lo stesso risultato con LTRIM (RTRIM (var)).
Kibbee,

52
Sì, ma sono due chiamate di funzione. Si potrebbe dire che sono tutti ridondanti poiché TSQL ha CHARINDEX e SUBSTRING, ma è un modo idiota di vederlo.
Ben Hoffstein,

9
Non è affatto ridondante. Non offrire una singola funzione chiamata TRIM pone l'onere della sintassi per l'utente.
Joelc,

3
Probabilmente è stata una svista, o una di quelle caratteristiche che sono state messe a tacere perché ogni funzione inizia a -100 punti (il che porta a serie di caratteristiche incoerenti invece di serie di priorità, IMHO).
siride,

7

Presumo che si tratti di un esercizio unico di pulizia dei dati. Una volta fatto, assicurarsi di aggiungere vincoli al database per prevenire dati errati in futuro, ad es

ALTER TABLE Customer ADD
   CONSTRAINT customer_names__whitespace
      CHECK (
             Names NOT LIKE ' %'
             AND Names NOT LIKE '% '
             AND Names NOT LIKE '%  %'
            );

Considera anche di non consentire altri caratteri (tabulazione, ritorno a capo, avanzamento riga, ecc.) Che potrebbero causare problemi.

Può anche essere un buon momento per dividere quei nomi in family_name, first_nameecc :)


4
SELECT LTRIM(RTRIM(Replace(Replace(Replace(name,'   ',' '),CHAR(13), ' '),char(10), ' ')))
from author

0

nel server sql 2008 r2 con espressione ssis abbiamo la funzione trim.

SQL Server Integration Services (SSIS) è un componente del software di database Microsoft SQL Server che può essere utilizzato per eseguire un'ampia gamma di attività di migrazione dei dati.

puoi trovare la descrizione completa su questo link

http://msdn.microsoft.com/en-us/library/ms139947.aspx

ma questa funzione ha alcune limitazioni in sé che sono menzionate anche da msdn su quella pagina. ma questo è in SQL Server 2008 R2

TRIM("   New York   ") .The return result is "New York".

3
Questo non ha nulla a che fare con MS SQL, tranne per il fatto che si trova in un prodotto in bundle con il database.
siride,

-1

Versione estesa di "REPLACE":

REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(RTRIM(LTRIM(REPLACE("Put in your Field name", ' ',' '))),'''',''), CHAR(9), ''), CHAR(10), ''), CHAR(13), ''), CHAR(160), '') [CorrValue]
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.