我在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 ......
我在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 ......
如果你只是想回到你的長字符串的幾個字符,你可以使用:
select
left(col, 15) + '...' col
from yourtable
這將返回字符串的前15個字符,然後連接...
到它的末尾。
如果你想確保不是字符串小於15沒有得到...
那麼你可以使用:
select
case
when len(col)>=15
then left(col, 15) + '...'
else col end col
from yourtable
如果原始字符串小於15個字符,當它不適用 – 2013-02-28 20:08:42
@KM時,仍會附加'...'。添加了一個版本,將檢查字符串長度爲 – Taryn 2013-02-28 20:12:18
+1,現在看起來不錯;-) – 2013-03-01 13:45:59
您可以使用 LEFT(列長度) 或 SUBSTRING(列,起始索引,長度)
請確保您在提問之前稍微搜索一下。答案很容易找到。
這個SO問題現在是最簡單的方法來找到如何在tsql中截斷字符串的答案。如果這個人沒有問過它,那麼我會通過一些MSDN文章拖網搜索,並且憎恨我的生活...... – 2013-09-13 16:13:03
如果我的回答聽起來很粗魯,那麼我很抱歉,這並不意味着無禮。但是,首先不應該問這個問題,因爲很容易找到答案。 MSDN是一個很好的方式來找到答案,它更容易找到答案。你不必在500頁上找到如何截斷SQL中的字符串。你可以在這裏獲得所有的字符串函數http://msdn.microsoft.com/en-us/library/ms181984.aspx – snaplemouton 2014-01-08 19:11:19
@snaplemouton它可能是「壞」問簡單的問題(因爲在答案很容易找到之前)無論如何,結果是好的。我的意思是,SO是爲了解答各種問題(甚至是那些詢問其他問題的人)。 – jahu 2014-10-13 11:18:47
我認爲這裏的答案很好,但我想添加一個場景。
幾次我想從字符串的前面取一定數量的字符,而不用擔心它的長度。有幾種方法可以用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
當輸出到文本文件時,我最喜歡這一個,因爲只有新的字符數分配給輸出文本文件中的該列。 (例如50而不是1000)以獲得更緊湊的結果。 – BillDarcy 2015-04-15 20:01:43
你也可以使用下面的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
CASE
WHEN col IS NULL
THEN ''
ELSE SUBSTRING(col,1,15)+ '...'
END AS Col
你的「期望字符串」包含了從「原始字符串」 28個字符,而不是貼着「10或15」你所要求的 – 2013-02-28 20:10:35