Frage Wie man die Zeichenkette mit SQL Server schneidet


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

Ursprüngliche Zeichenfolge

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 ......

75
2018-02-28 17:56


Ursprung


Antworten:


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

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

Sehen SQL Geige mit Demo.

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

Wenn Sie sicherstellen möchten, dass weniger als 15 Strings nicht erhalten ... dann kannst du verwenden:

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

Sehen SQL Geige mit Demo


116
2018-02-28 17:58



Sie können verwenden

LEFT(column, length)

oder

SUBSTRING(column, start index, length)

15
2018-02-28 18:24



Ich denke, die Antworten hier sind großartig, aber ich würde gerne ein Szenario hinzufügen.

Mehrmals wollte ich eine bestimmte Anzahl von Zeichen von der Vorderseite eines Strings nehmen, ohne sich Gedanken über die Länge zu machen. Es gibt mehrere Möglichkeiten, dies mit RIGHT () und SUBSTRING () zu tun, aber alle müssen die Länge der Zeichenfolge kennen, die manchmal die Geschwindigkeit verlangsamen kann.

Ich habe stattdessen die Funktion STUFF () verwendet:

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

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


4
2018-02-24 23:38



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

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

3
2018-03-25 09:14



Sie können auch das Folgende verwenden, das iif vermeidet die case-Anweisung und fügt bei Bedarf nur Ellipsen hinzu (nur in SQL Server 2012 und höher) und die case-Anweisung ist mehr ANSI-konform (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

1
2018-05-31 21:11



     CASE
     WHEN col IS NULL
        THEN ''
     ELSE SUBSTRING(col,1,15)+ '...' 
     END AS Col

0
2017-07-03 13:19