如何使用SQL Server截取字符串

143
我有一个在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 ......

3
你的“desired string”中包含了“original string”的28个字符,远超过你所要求的“10或15”个字符。 - KM.
6个回答

218
如果您只想返回长字符串的几个字符,可以使用以下方法:
select 
  left(col, 15) + '...' col
from yourtable

查看 带演示的 SQL Fiddle

这将返回字符串的前15个字符,并将 ... 连接到末尾。

如果你想确保少于15个字符的字符串不会得到 ...,那么可以使用:

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

查看 带演示的 SQL Fiddle


2
如果原始字符串小于15个字符,则仍会在其不适用时添加“...” - KM.
1
@KM 添加了一个版本,它将检查字符串长度。 - Taryn
3
如果col的长度恰好为15,则使用left(col,15)将获取整个字符串,然后在末尾添加“...”。更好的解决方案当然是检查“当len(col)>15”时。 - Murphybro2

53

您可以使用

LEFT(column, length)

或者

SUBSTRING(column, start index, length)

1
如果我的回答听起来很粗鲁,我感到很抱歉,这并不是我的本意。但事实仍然如此,这个问题本来就不应该被问出来,因为很容易找到答案。MSDN是一个寻找答案的绝佳途径,很容易在上面找到所需的答案。您不必翻阅500页才能找到如何截断SQL中的字符串。你可以在这里获得所有的字符串函数 http://msdn.microsoft.com/en-us/library/ms181984.aspx - snaplemouton
13
此外,MSDN 在描述这两个函数时并没有使用“TRUNCATE”一词。 - pablete

7

你也可以使用Cast()操作:

 Declare @name varchar(100);
set @name='....';
Select Cast(@name as varchar(10)) as new_name

1
我喜欢将输出写入文本文件时使用这种方式,因为在输出文本文件中,只有新字符数被分配给该列。(例如,50而不是1000),以获得更紧凑的结果。 - BillDarcy

4

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

有几次我想从字符串的前面取出一定数量的字符,而不用担心它的长度。使用RIGHT()和SUBSTRING()有几种方法可以做到这一点,但它们都需要知道字符串的长度,这有时会减慢事情的进展。

相反,我使用了STUFF()函数:

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

这将用空字符串替换不需要的字符串长度。


2

您也可以使用以下方法,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

0
     CASE
     WHEN col IS NULL
        THEN ''
     ELSE SUBSTRING(col,1,15)+ '...' 
     END AS Col

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接