139 votes

Comment tronquer une chaîne de caractères en utilisant le serveur SQL

J'ai une grande chaîne de caractères dans le serveur SQL. 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 ......

212voto

bluefeet Points 105508

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

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

Voir Bricolage SQL avec démo .

Cette opération renvoie les 15 premiers caractères de la chaîne de caractères, puis concatène les éléments suivants ... à la fin de celui-ci.

Si vous voulez vous assurer que les chaînes de caractères inférieures à 15 n'obtiennent pas l'alerte. ... alors vous pouvez utiliser :

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

Voir Bricolage SQL avec démo

49voto

snaplemouton Points 986

Vous pouvez utiliser

LEFT(column, length)

o

SUBSTRING(column, start index, length)

6voto

goli55 Points 1

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

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

4voto

Dan Points 393

Je pense que les réponses données ici sont excellentes, mais j'aimerais ajouter un scénario.

Il m'est arrivé à plusieurs reprises de vouloir retirer un certain nombre de caractères du début d'une chaîne, sans me soucier de sa longueur. Il existe plusieurs façons de le faire avec RIGHT() et SUBSTRING(), mais elles doivent toutes 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, '')

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

1voto

Gregory Blajian Points 21

Vous pouvez également utiliser l'exemple ci-dessous, l'option iif évite l'instruction case et n'ajoute des ellipses que lorsque cela est nécessaire (valable uniquement pour SQL Server 2012 et les 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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X