mam duży ciąg w SQL Server. Chcę skrócić ten ciąg do 10 lub 15 znaków
Oryginalny ciąg
this is test string. this is test string. this is test string. this is test string.
Pożądany ciąg
this is test string. this is ......
mam duży ciąg w SQL Server. Chcę skrócić ten ciąg do 10 lub 15 znaków
Oryginalny ciąg
this is test string. this is test string. this is test string. this is test string.
Pożądany ciąg
this is test string. this is ......
Odpowiedzi:
Jeśli chcesz zwrócić tylko kilka znaków swojego długiego ciągu, możesz użyć:
select
left(col, 15) + '...' col
from yourtable
Zobacz SQL Fiddle with Demo .
Spowoduje to zwrócenie pierwszych 15 znaków ciągu, a następnie połączenie znaku ...
na końcu.
Jeśli chcesz mieć pewność, że ciągi mniejsze niż 15 nie dostaną ...
, możesz użyć:
select
case
when len(col)>=15
then left(col, 15) + '...'
else col end col
from yourtable
Zobacz SQL Fiddle with Demo
...
dopisek, gdy nie ma on zastosowania
Możesz użyć
LEFT(column, length)
lub
SUBSTRING(column, start index, length)
Myślę, że odpowiedzi tutaj są świetne, ale chciałbym dodać scenariusz.
Kilka razy chciałem usunąć pewną liczbę znaków z przodu ciągu, nie martwiąc się o jego długość. Jest na to kilka sposobów za pomocą RIGHT () i SUBSTRING (), ale wszystkie muszą znać długość łańcucha, co czasami może spowolnić działanie.
Zamiast tego użyłem funkcji STUFF ():
SET @Result = STUFF(@Result, 1, @LengthToRemove, '')
Spowoduje to zastąpienie długości niepotrzebnego ciągu pustym ciągiem.
Możesz także użyć operacji Cast ():
Declare @name varchar(100);
set @name='....';
Select Cast(@name as varchar(10)) as new_name
Możesz również użyć poniższego, iif pomija instrukcję case i dodaje wielokropki tylko wtedy, gdy jest to wymagane (dobre tylko w SQL Server 2012 i nowszych), a instrukcja case jest bardziej zgodna z ANSI (ale bardziej szczegółowa)
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