Sql server 如何使用SQL server截断字符串

Sql server 如何使用SQL server截断字符串,sql-server,tsql,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 ...... 如果只想返回长字符串中的几个字符,可以使用: select left(col, 15) + '...' col from yourtable s

我在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
select 
  case 
    when len(col)>=15
    then left(col, 15) + '...' 
    else col end col
from yourtable

这将返回字符串的前15个字符,然后将
连接到字符串的末尾

如果要确保小于15的字符串不会获得
,则可以使用:

select 
  left(col, 15) + '...' col
from yourtable
select 
  case 
    when len(col)>=15
    then left(col, 15) + '...' 
    else col end col
from yourtable
请参见您可以使用的

LEFT(column, 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避免使用case语句,仅在需要时添加省略号(仅在SQL Server 2012和更高版本中适用),case语句更符合ANSI(但更详细)


如果原始字符串少于15个字符,则仍会追加
apply@KM. 添加了一个版本,该版本将检查字符串长度如果列的长度正好为15,它将在执行左(列,15)操作时获得整个字符串,然后将“…”放在末尾。当然,更好的解决方案是检查“when len(col)>15”。您的“所需字符串”包含“原始字符串”中的28个字符,与您要问的“10或15”不太接近。因此,这个问题现在是找到如何在tsql中截断字符串的答案的最简单方法。如果这个人没有问这个问题,那么我现在就在浏览一些MSDN文章,痛恨我的生活…@snaplemouton问一些简单的问题可能是“不好”的(就像在以前的答案中很容易找到的那样),但结果无论如何都是好的。我的意思是,SO意味着为各种各样的问题保留答案(即使是那些询问其他容易找到的东西的问题)。@snaplemouton;你猜怎么着,当搜索这个问题/答案时,它位于结果的顶部,这为我节省了很多时间。另外,MSDN没有使用单词来表达对这两个函数的描述TRUNCATE@snaplemouton,我在谷歌上找到了这个答案。请停止告诉人们在StackOverflow上搜索东西,因为未来的谷歌用户会看到这一点。这个网站的存在在很大程度上是为了在谷歌搜索结果中显示出来。我最喜欢这个网站在输出到文本文件时,因为只有新的字符数被分配到输出文本文件中的该列。(例如,50而不是1000)以获得更紧凑的结果。
     CASE
     WHEN col IS NULL
        THEN ''
     ELSE SUBSTRING(col,1,15)+ '...' 
     END AS Col