如何使用 SQL 服务器截断字符串

在 SQLServer 中有一个大字符串。我想将该字符串截断为10或15个字符

原始字符串

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

想要的线

this is test string. this is ......
293505 次浏览

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

select
left(col, 15) + '...' col
from yourtable

参见 演示中的 SQL 小提琴

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

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

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

参见 演示中的 SQL 小提琴

你可以用

LEFT(column, length)

或者

SUBSTRING(column, start index, 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 (但更详细)

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