2016-01-13 18 views
5

I dati contengono spazi iniziali e finali nella stringa. quando si memorizzano i dati nel database, voglio ridimensionare lo spazio nella query stessa prima di archiviarlo in DB.Come tagliare spazi iniziali e finali nella query MSSQL

Gli spazi normali vengono ritagliati correttamente con la funzione RTRIM e LTRIM, ma se una stringa contiene spazio di tabulazione, non viene ritagliato dallo spazio di tabulazione dalla stringa di input.

Qualcuno può aiutarmi a ottenere la stringa con margini di tabulazione da iniziale e finale.

+1

sostituire tutte le schede con spazi, tagliare la stringa intermedia, quindi convertire gli spazi in schede? –

risposta

6

Sostituire il codice ASCII per scheda (9):

replace(@str, char(9), '') 

Per rimuovere solo le schede esterne, prima li cambiano a qualcosa che non esisterà i dati (io uso una serie di quattro spazi in questo esempio), allora rtrim/ltrim, quindi convertire la stessa sequenza ritorna schede:

replace(ltrim(rtrim(replace(@str, char(9), ' '))),' ', char(9)); 
+1

questo sostituirà anche tutti i tab spazi tra le stringhe, voglio solo lo spazio iniziale e finale. – user3876801

+0

@ user3876801 Ho aggiornato la risposta per includere questo scenario. – morgb

+0

per quanto riguarda le prestazioni se i dati sono molto grandi, poiché per convertire i dati viene utilizzata più volte la funzione di sostituzione dell'orario. – user3876801

0

Prova questo:

DECLARE @InputString nvarchar(50) = CHAR(9) + CHAR(9) + ' 123'+ 'abc ' + CHAR(9); 
SELECT @InputString AS InputString 
     ,REVERSE(RIGHT(REVERSE(RIGHT(@InputString, LEN(@InputString) - PATINDEX('%[^'+CHAR(9)+']%', @InputString) + 1)), LEN(REVERSE(RIGHT(@InputString, LEN(@InputString) - PATINDEX('%[^'+CHAR(9)+']%', @InputString) + 1))) - PATINDEX('%[^'+CHAR(9)+']%', REVERSE(RIGHT(@InputString, LEN(@InputString) - PATINDEX('%[^'+CHAR(9)+']%', @InputString) + 1))) + 1)) AS OutputString 
; 

Forse dovresti rifattenerlo come una funzione. Nota, può funzionare solo sopra Sql Server 2008. Puoi sostituire CHAR (9) con qualsiasi carattere che desideri tagliare.

Problemi correlati