我在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 ......
答案 0 :(得分:135)
如果您只想返回长字符串的几个字符,可以使用:
select
left(col, 15) + '...' col
from yourtable
这将返回字符串的前15个字符,然后将...
连接到它的末尾。
如果你想确保小于15的字符串没有得到...
那么你可以使用:
select
case
when len(col)>=15
then left(col, 15) + '...'
else col end col
from yourtable
答案 1 :(得分:24)
您可以使用
LEFT(column, length)
或
SUBSTRING(column, start index, length)
答案 2 :(得分:4)
我认为这里的答案很棒,但我想添加一个场景。
有几次我想从字符串的前面拿出一定数量的字符,而不用担心它的长度。使用RIGHT()和SUBSTRING()有几种方法可以做到这一点,但是他们都需要知道字符串的长度,这有时会减慢速度。
我改为使用STUFF()函数:
SET @Result = STUFF(@Result, 1, @LengthToRemove, '')
这将使用空字符串替换不需要的字符串的长度。
答案 3 :(得分:3)
您还可以使用Cast()操作:
Declare @name varchar(100);
set @name='....';
Select Cast(@name as varchar(10)) as new_name
答案 4 :(得分: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
答案 5 :(得分:0)
CASE
WHEN col IS NULL
THEN ''
ELSE SUBSTRING(col,1,15)+ '...'
END AS Col