У мене є великий рядок у 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 ......
У мене є великий рядок у 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 ......
Відповіді:
Якщо ви хочете повернути лише кілька символів вашої довгої струни, ви можете використовувати:
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 Fiddle with Demo
...
додаєте додаток, коли він не застосовується
Можна використовувати
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 уникає оператора і додає еліпси лише тоді, коли це потрібно (лише добре в SQL Server 2012 та пізніших версіях), а випадок регістру більш сумісний з 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