如何使用SQL Server截断字符串


105

我在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 ......

1
您的“所需字符串”包含“原始字符串”中的28个字符,不接近您要求的“ 10或15”
KM。

Answers:


158

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

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。

@KM。添加了一个将检查字符串长度的版本
Taryn

2
如果col的长度正好为15,则在进行left(col,15)时将获得整个字符串,然后在末尾加上“ ...”。当然,更好的解决方案是检查“当len(col)> 15时”。
Murphybro2

35

您可以使用

LEFT(column, length)

要么

SUBSTRING(column, start index, length)

83
现在,这个SO问题是找到如何在tsql中截断字符串的答案的最简单方法。如果这个人没有要求,那么我将在MSDN文章中浏览并讨厌我的生活...
DMac the Destroyer 2013年

4
@snaplemouton询问关于简单事物的问题可能是“不好的”(因为以前很容易找到答案),但是结果还是不错的。我的意思是说SO旨在保留各种问题的答案(甚至是那些询问本来就很容易找到的东西的人)。
贾胡

8
@snaplemouton; 猜猜是什么,当搜索此问题/答案时位于结果的顶部,这为我节省了很多时间。
AMissico 2014年

9
此外,MSDN不会使用单词TRUNCATE
pablete

4
@snaplemouton,我在Google上找到了这个答案。请停止在StackOverflow上告诉别人Google的事情,因为将来的Google员工会看到它。该网站大部分存在于Google搜索结果中。
Slothario '16

4

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

几次我都想从字符串的开头删除一定数量的字符,而不用担心它的长度。有多种使用RIGHT()和SUBSTRING()进行此操作的方法,但是它们都需要知道字符串的长度,这有时会使速度变慢。

我改用了STUFF()函数:

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

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


4

您还可以使用Cast()操作:

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

输出到文本文件时,我最喜欢这一点,因为只有新的字符数分配给了输出文本文件中的该列。(例如50代替1000)以获得更紧凑的结果。
BillDarcy 2015年

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

0
     CASE
     WHEN col IS NULL
        THEN ''
     ELSE SUBSTRING(col,1,15)+ '...' 
     END AS Col
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.