Как усечь строку с помощью SQL server


у меня есть большая строка в SQL Server. Я хочу усечь эту строку до 10 или 15 символов

исходная строка

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

нужную строку

this is test string. this is ......
6 79

6 ответов:

если вы хотите вернуть только несколько символов вашей длинной строки, вы можете использовать:

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

посмотреть SQL Скрипка с демо.

это вернет первые 15 символов строки, а затем сцепляет ... до конца.

если вы хотите, чтобы убедиться, что строки менее 15 не получают ... затем вы можете использовать:

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

посмотреть SQL Скрипка с демо

можно использовать

LEFT(column, length)

или

SUBSTRING(column, start index, length)

Я думаю, что ответы здесь велики, но я хотел бы добавить сценарий.

несколько раз я хотел снять определенное количество символов с передней части строки, не беспокоясь о ее длине. Есть несколько способов сделать это с помощью RIGHT() и SUBSTRING(), но все они должны знать длину строки, которая иногда может замедлять работу.

вместо этого я использую функцию STUFF ():

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

это заменяет длину ненужная строка с пустой строкой.

вы также можете использовать операцию Cast ():

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

вы также можете использовать ниже, iif избегает оператора case и добавляет многоточия только при необходимости (только хорошо в SQL Server 2012 и более поздних версиях), а оператор case более совместим с ANSI (но более подробный)

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