Comment tronquer une chaîne à L'aide de SQL server

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

Chaîne d'Origine

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 ......
79
demandé sur alroc 2013-02-28 21:56:21

6 réponses

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

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

Voir SQL jouer avec la Démo.

Cela renverra 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 ... alors vous pouvez utiliser:

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

Voir SQL jouer avec la Démo

122
répondu Taryn 2013-02-28 20:11:57

Vous pouvez utiliser

LEFT(column, length)

Ou

SUBSTRING(column, start index, length)
19
répondu snaplemouton 2018-08-02 09:04:41

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

Plusieurs fois, j'ai voulu enlever une certaine quantité de caractères du devant d'une chaîne, sans me soucier de sa longueur. Il y a plusieurs façons de le faire avec RIGHT () et SUBSTRING (), mais ils ont tous besoin de connaître la longueur de la chaîne qui peut parfois ralentir les choses.

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

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

Cela remplace la longueur de la chaîne inutile par un chaîne vide.

4
répondu Dan 2015-02-24 23:38:51

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

 Declare @name varchar(100);
set @name='....';
Select Cast(@name as varchar(10)) as new_name
3
répondu goli55 2015-03-25 09:14:36

Vous pouvez également utiliser ci-dessous, l'iif évite l'instruction case et n'ajoute que des ellipses lorsque cela est nécessaire (seulement bon dans SQL Server 2012 et versions ultérieures) et l'instruction case est plus conforme à la norme ANSI (mais plus verbeuse)

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
répondu Gregory Blajian 2017-05-31 21:11:04
     CASE
     WHEN col IS NULL
        THEN ''
     ELSE SUBSTRING(col,1,15)+ '...' 
     END AS Col
0
répondu dLight 2017-07-03 13:19:05