Как усечь строку с помощью 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 ответов:
если вы хотите вернуть только несколько символов вашей длинной строки, вы можете использовать:
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 Скрипка с демо
Я думаю, что ответы здесь велики, но я хотел бы добавить сценарий.
несколько раз я хотел снять определенное количество символов с передней части строки, не беспокоясь о ее длине. Есть несколько способов сделать это с помощью 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