如何使用SQL Server截断string

我在SQL Server中有大string。 我想截断该string10或15个字符

原始string

this is test string. this is test string. this is test string. this is test string. 

期望的string

 this is test string. this is ...... 

如果您只想返回长string的几个字符,则可以使用:

 select left(col, 15) + '...' col from yourtable 

看演示与SQL小提琴 。

这将返回string的前15个字符,然后将...连接到它的结尾。

如果你想要确保比string小于15不要得到...那么你可以使用:

 select case when len(col)>=15 then left(col, 15) + '...' else col end col from yourtable 

看演示与SQL小提琴

你可以使用LEFT(column,length)或SUBSTRING(column,start index,length)

在提出问题之前,请确保您稍微search一下。 答案很容易find。

我认为这里的答案很好,但我想添加一个场景。

有几次,我想从string的前面取一定数量的字符,而不用担心它的长度。 使用RIGHT()和SUBSTRING()方法有几种方法,但是它们都需要知道string的长度,有时会减慢速度。

我已经使用了STUFF()函数:

 SET @Result = STUFF(@Result, 1, @LengthToRemove, '') 

这将用一个空stringreplace不需要的string的长度。

您也可以使用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 
  CASE WHEN col IS NULL THEN '' ELSE SUBSTRING(col,1,15)+ '...' END AS Col