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

106

у меня большая строка в 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
ваша «желаемая строка» содержит 28 символов из «исходной строки», не близкие к запрашиваемым вами «10 или 15»
KM.

Ответы:

159

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

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

Смотрите SQL Fiddle с демонстрацией .

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

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

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

См. SQL Fiddle с демонстрацией

Тарин
источник
2
если исходная строка меньше 15 символов, вы все равно получите ...добавленный, когда он не применяется
KM.
@KM. добавлена ​​версия, которая будет проверять длину строки
Тарин
2
Если col имеет длину ровно 15, он получит всю строку при выполнении left (col, 15), а затем поставит '...' в конце. Конечно, лучшее решение - проверка 'when len (col)> 15'.
Murphybro2
35

Ты можешь использовать

LEFT(column, length)

или

SUBSTRING(column, start index, length)
Снаплемутон
источник
83
Этот вопрос SO теперь является самым простым способом найти ответ на то, как обрезать строку в tsql. Если бы этот человек не спросил об этом, то я бы
рылся в
4
@snaplemouton Может быть "плохо" задавать вопросы о простых вещах (поскольку в ответе раньше было легко найти ответ), но результат все равно хороший. Я имею в виду, что SO предназначен для ответов на все виды вопросов (даже те, которые спрашивают о том, что в противном случае легко найти).
jahu
8
@snaplemouton; Угадайте, что при поиске этот вопрос / ответ был в верхней части результатов, что сэкономило мне много времени.
AMissico
9
Кроме того, MSDN не формулирует описание какой-либо функции с использованием слова TRUNCATE
pablete
4
@snaplemouton, я нашел этот ответ в гугле. Пожалуйста, перестаньте рассказывать людям о вещах Google в StackOverflow, так как будущие сотрудники Google это увидят. Этот сайт существует в основном для того, чтобы отображаться в результатах Google.
Slothario
4

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

Несколько раз я хотел убрать определенное количество символов с начала строки, не беспокоясь о ее длине. Есть несколько способов сделать это с помощью 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
голи55
источник
Мне больше всего нравится этот вариант при выводе в текстовый файл, потому что этому столбцу в выходном текстовом файле выделяется только новое количество символов. (например, 50 вместо 1000) для более компактных результатов.
BillDarcy
1

Вы также можете использовать приведенное ниже: 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
Грегори Блажян
источник
0
     CASE
     WHEN col IS NULL
        THEN ''
     ELSE SUBSTRING(col,1,15)+ '...' 
     END AS Col
ВверхD
источник