web-dev-qa-db-fra.com

Comment tronquer une chaîne en utilisant SQL Server

j'ai une grosse chaîne dans SQL Server. Je veux tronquer cette chaîne à 10 ou 15 caractères

Chaîne originale

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

Chaîne souhaitée

this is test string. this is ......
96
SanamShaikh

Si vous voulez seulement renvoyer quelques caractères de votre longue chaîne, vous pouvez utiliser:

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

Voir SQL Fiddle avec Demo .

Cela retournera les 15 premiers caractères de la chaîne puis concaténera le ... à la fin de celle-ci.

Si vous voulez vous assurer que les chaînes inférieures à 15 n'obtiennent pas le ..., vous pouvez utiliser:

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

Voir SQL Fiddle avec Demo

142
Taryn

Vous pouvez utiliser

LEFT(column, length)

ou

SUBSTRING(column, start index, length)
26
snaplemouton

Je pense que les réponses ici sont excellentes, mais je voudrais ajouter un scénario.

Plusieurs fois, j'ai eu envie de prendre une certaine quantité de caractères au début d'une chaîne, sans me soucier de sa longueur. Il existe plusieurs façons de faire cela avec RIGHT () et SUBSTRING (), mais ils ont tous besoin de connaître la longueur de la chaîne, ce qui peut parfois ralentir les choses.

J'ai utilisé la fonction STUFF () à la place:

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

Ceci remplace la longueur de la chaîne inutile par une chaîne vide.

4
Chloe

Vous pouvez également utiliser l'opération Cast ():

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

Vous pouvez également utiliser ce qui suit, iif évite l’instruction case et n’ajoute que des ellipses lorsque cela est nécessaire (utile uniquement dans SQL Server 2012 et versions ultérieures) et la déclaration case est davantage conforme à la norme ANSI (mais plus détaillée).

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