Как обрезать строку с помощью SQL-сервера

У меня есть большая строка в 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 ......

Ответ 1

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

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

См. SQL Fiddle with Demo.

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

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

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

Смотрите скрипт SQL с демонстрацией

Ответ 2

Вы можете использовать LEFT (столбец, длина) или SUBSTRING (столбец, начальный индекс, длина)

Перед тем, как задать вопрос, убедитесь, что вы немного поискали. Ответ довольно легко найти.

Ответ 3

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

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

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

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

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

Ответ 4

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

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

Ответ 5

Вы также можете использовать приведенное ниже, 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

Ответ 6

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