So schneiden Sie Zeichenfolgen mit SQL Server ab

105

Ich habe große Zeichenfolge in SQL Server. Ich möchte diese Zeichenfolge auf 10 oder 15 Zeichen kürzen

Original Saite

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

Gewünschte Zeichenfolge

this is test string. this is ......
SanamShaikh
quelle
1
Ihre "gewünschte Zeichenfolge" enthält 28 Zeichen aus der "ursprünglichen Zeichenfolge", nicht in der Nähe der von Ihnen gewünschten "10 oder 15"
KM.

Antworten:

156

Wenn Sie nur einige Zeichen Ihrer langen Zeichenfolge zurückgeben möchten, können Sie Folgendes verwenden:

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

Siehe SQL Fiddle mit Demo .

Dadurch werden die ersten 15 Zeichen der Zeichenfolge zurückgegeben und die Zeichen ...bis zum Ende verkettet .

Wenn Sie sicherstellen möchten, dass Zeichenfolgen unter 15 nicht angezeigt werden ..., können Sie Folgendes verwenden:

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

Siehe SQL Fiddle mit Demo

Taryn
quelle
2
Wenn die ursprüngliche Zeichenfolge weniger als 15 Zeichen enthält, wird die ...angehängte Zeichenfolge trotzdem angehängt, wenn sie nicht zutrifft
KM.
@KM. hat eine Version hinzugefügt, die die Länge der Zeichenfolge überprüft
Taryn
2
Wenn col genau 15 lang ist, erhält es die gesamte Zeichenfolge, wenn es nach links geht (col, 15) und setzt dann '...' am Ende. Sicherlich ist es besser zu prüfen, ob len (col)> 15 ist.
Murphybro2
35

Sie können verwenden

LEFT(column, length)

oder

SUBSTRING(column, start index, length)
Snaplemouton
quelle
83
Diese SO-Frage ist jetzt der einfachste Weg, um die Antwort darauf zu finden, wie eine Zeichenfolge in tsql abgeschnitten wird. Wenn diese Person es nicht gefragt hätte, würde ich einen MSDN-Artikel
durchforsten
4
@snaplemouton Es mag "schlecht" sein, Fragen zu einfachen Dingen zu stellen (wie in der Antwort zuvor leicht zu finden), aber das Ergebnis ist trotzdem gut. Ich meine, SO soll Antworten auf alle Arten von Fragen enthalten (auch diejenigen, die nach ansonsten leicht zu findenden Fragen fragen).
Jahu
8
@snaplemouton; Ratet mal, was bei der Suche nach dieser Frage / Antwort ganz oben auf den Ergebnissen stand, was mir viel Zeit spart.
AMissico
9
Außerdem formuliert
pablete
4
@snaplemouton, ich habe diese Antwort bei Google gefunden. Bitte hören Sie auf, Leuten auf StackOverflow zu Google-Dingen zu sagen, wie zukünftige Googler es sehen werden. Diese Website ist größtenteils vorhanden, um in den Google-Ergebnissen angezeigt zu werden.
Slothario
4

Ich finde die Antworten hier großartig, möchte aber ein Szenario hinzufügen.

Mehrmals wollte ich eine bestimmte Anzahl von Zeichen von der Vorderseite einer Zeichenfolge entfernen, ohne mir Gedanken über deren Länge zu machen. Es gibt verschiedene Möglichkeiten, dies mit RIGHT () und SUBSTRING () zu tun, aber alle müssen die Länge der Zeichenfolge kennen, was manchmal zu Verzögerungen führen kann.

Ich habe stattdessen die Funktion STUFF () verwendet:

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

Dies ersetzt die Länge einer nicht benötigten Zeichenfolge durch eine leere Zeichenfolge.

Chloe
quelle
4

Sie können auch die Operation Cast () verwenden:

 Declare @name varchar(100);
set @name='....';
Select Cast(@name as varchar(10)) as new_name
goli55
quelle
Ich mag dieses am besten, wenn ich es in eine Textdatei ausgeben möchte, da dieser Spalte in der Ausgabetextdatei nur die neue Anzahl von Zeichen zugewiesen wird. (zB 50 statt 1000) für kompaktere Ergebnisse.
BillDarcy
1

Sie können auch Folgendes verwenden: Das iif vermeidet die case-Anweisung und fügt nur bei Bedarf Ellipsen hinzu (nur in SQL Server 2012 und höher gültig). Die case-Anweisung ist ANSI-kompatibler (aber ausführlicher).

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