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