如何使用SQL Server截断字符串

时间:2013-02-28 17:56:21

标签: sql-server tsql

我在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 个答案:

答案 0 :(得分:135)

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

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

答案 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