2013-02-28 59 views
68

我在SQL Server中有大字符串。我想這個字符串截斷爲10或15個字符的如何使用SQL服務器截斷字符串

原始字符串

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

所需的字符串

this is test string. this is ...... 
+0

你的「期望字符串」包含了從「原始字符串」 28個字符,而不是貼着「10或15」你所要求的 – 2013-02-28 20:10:35

回答

103

如果你只是想回到你的長字符串的幾個字符,你可以使用:

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

如果原始字符串小於15個字符,當它不適用 – 2013-02-28 20:08:42

+0

@KM時,仍會附加'...'。添加了一個版本,將檢查字符串長度爲 – Taryn 2013-02-28 20:12:18

+0

+1,現在看起來不錯;-) – 2013-03-01 13:45:59

12

您可以使用 LEFT(列長度) 或 SUBSTRING(列,起始索引,長度)

請確保您在提問之前稍微搜索一下。答案很容易找到。

+72

這個SO問題現在是最簡單的方法來找到如何在tsql中截斷字符串的答案。如果這個人沒有問過它,那麼我會通過一些MSDN文章拖網搜索,並且憎恨我的生活...... – 2013-09-13 16:13:03

+1

如果我的回答聽起來很粗魯,那麼我很抱歉,這並不意味着無禮。但是,首先不應該問這個問題,因爲很容易找到答案。 MSDN是一個很好的方式來找到答案,它更容易找到答案。你不必在500頁上找到如何截斷SQL中的字符串。你可以在這裏獲得所有的字符串函數http://msdn.microsoft.com/en-us/library/ms181984.aspx – snaplemouton 2014-01-08 19:11:19

+3

@snaplemouton它可能是「壞」問簡單的問題(因爲在答案很容易找到之前)無論如何,結果是好的。我的意思是,SO是爲了解答各種問題(甚至是那些詢問其他問題的人)。 – jahu 2014-10-13 11:18:47

4

我認爲這裏的答案很好,但我想添加一個場景。

幾次我想從字符串的前面取一定數量的字符,而不用擔心它的長度。有幾種方法可以用RIGHT()和SUBSTRING()來做到這一點,但是他們都需要知道字符串的長度,這有時會減慢速度。

我已經改用了STUFF()函數:

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

這取代不必要的字符串爲空字符串的長度。

3

您也可以使用CAST()操作:

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

當輸出到文本文件時,我最喜歡這一個,因爲只有新的字符數分配給輸出文本文件中的該列。 (例如50而不是1000)以獲得更緊湊的結果。 – BillDarcy 2015-04-15 20:01:43

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