Come troncare una stringa utilizzando SQL server


105

ho una stringa di grandi dimensioni in SQL Server. Voglio troncare quella stringa a 10 o 15 caratteri

Stringa originale

this is test string. this is test string. this is test string. this is test string.

Stringa desiderata

this is test string. this is ......

1
la tua "stringa desiderata" contiene 28 caratteri dalla "stringa originale", non vicini al "10 o 15" che stai chiedendo
KM.

Risposte:


158

Se vuoi restituire solo pochi caratteri della tua stringa lunga, puoi usare:

select 
  left(col, 15) + '...' col
from yourtable

Vedi SQL Fiddle con Demo .

Ciò restituirà i primi 15 caratteri della stringa e quindi li concatena ...alla fine.

Se vuoi assicurarti che le stringhe inferiori a 15 non ottengano il ..., puoi usare:

select 
  case 
    when len(col)>=15
    then left(col, 15) + '...' 
    else col end col
from yourtable

Vedi SQL Fiddle con Demo


2
se la stringa originale è inferiore a 15 caratteri, viene comunque ...aggiunto il testo aggiunto quando non è applicabile
KM.

@KM. aggiunta una versione che controllerà la lunghezza delle stringhe
Taryn

2
Se col è esattamente 15 di lunghezza, otterrà l'intera stringa quando si esegue sinistra (col, 15) e quindi metterà '...' alla fine. Sicuramente una soluzione migliore è controllare 'quando len (col)> 15'.
Murphybro2

35

Puoi usare

LEFT(column, length)

o

SUBSTRING(column, start index, length)

83
Questa domanda SO è ora il modo più semplice per trovare la risposta a come troncare una stringa in tsql. Se questa persona non l'avesse chiesto, avrei
cercato di leggere

4
@snaplemouton Potrebbe essere "brutto" fare domande su cose semplici (poiché la risposta era facile da trovare prima), ma il risultato è comunque buono. Voglio dire, SO ha lo scopo di contenere le risposte a tutti i tipi di domande (anche quelle che chiedono cose altrimenti facili da trovare).
jahu

8
@snaplemouton; Indovina cosa, durante la ricerca di questa domanda / risposta era in cima ai risultati che mi ha fatto risparmiare un sacco di tempo.
AMissico

9
Inoltre, l'MSDN non formula la descrizione di nessuna delle funzioni utilizzando la parola TRUNCATE
pablete

4
@snaplemouton, ho trovato questa risposta su Google. Per favore, smetti di dire alle persone di Google cose su StackOverflow, come lo vedranno i futuri googler. Questo sito esiste in gran parte per essere visualizzato nei risultati di Google.
Slothario

4

Penso che le risposte qui siano ottime, ma vorrei aggiungere uno scenario.

Diverse volte ho voluto togliere una certa quantità di caratteri dalla parte anteriore di una stringa, senza preoccuparmi della sua lunghezza. Ci sono diversi modi per farlo con RIGHT () e SUBSTRING (), ma tutti hanno bisogno di conoscere la lunghezza della stringa che a volte può rallentare le cose.

Ho usato invece la funzione STUFF ():

SET @Result = STUFF(@Result, 1, @LengthToRemove, '')

Questo sostituisce la lunghezza della stringa non necessaria con una stringa vuota.


4

Puoi anche usare l'operazione Cast ():

 Declare @name varchar(100);
set @name='....';
Select Cast(@name as varchar(10)) as new_name

Questo mi piace di più quando si esegue l'output in un file di testo perché solo il nuovo numero di caratteri viene assegnato a quella colonna nel file di testo di output. (es. 50 invece di 1000) per risultati più compatti.
BillDarcy

1

È anche possibile utilizzare quanto segue, l'iif evita l'istruzione case e aggiunge i puntini di sospensione solo quando richiesto (buono solo in SQL Server 2012 e versioni successive) e l'istruzione case è più conforme ad ANSI (ma più dettagliata)

SELECT 
  col, LEN(col), 
  col2, LEN(col2), 
  col3, LEN(col3) FROM (
  SELECT 
    col, 
    LEFT(x.col, 15) + (IIF(len(x.col) > 15, '...', '')) AS col2, 
    LEFT(x.col, 15) + (CASE WHEN len(x.col) > 15 THEN '...' ELSE '' END) AS col3 
  from (
      select 'this is a long string. One that is longer than 15 characters' as col
      UNION 
      SELECT 'short string' AS col
      UNION 
      SELECT 'string==15 char' AS col
      UNION 
      SELECT NULL AS col
      UNION 
      SELECT '' AS col
) x
) y

0
     CASE
     WHEN col IS NULL
        THEN ''
     ELSE SUBSTRING(col,1,15)+ '...' 
     END AS Col
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.