将nvarchar(max)截断为带省略号的nvarchar(n)

5

如何将nvarchar(max)快速转换为nvarchar(n)并指示有更多数据?

例如:将列Address转换为nvarchar(100),如果Address超过100个字符,则用“...”替换最后3个字符。


那么,它将是97个字符和“...”吗? - Lamak
@Lamak 是的,没错 - James
在字符计数中,是否应包括末尾空格? - Laurence
你只是想要丢弃那些数据吗? - Aaron Bertrand
@Laurence 是的,不需要检查。已经删除了所有前导和尾随空格。 - James
2个回答

3
UPDATE t
SET t.Address = SUBSTRING(t.Address, 1, 97) + '...'
FROM TableName t
WHERE LEN(t.Address) > 100;

ALTER TABLE dbo.TableName
  ALTER COLUMN Address NVARCHAR (100);

1
这个应该怎么工作?首先将列转换为NVARCHAR(100),然后检查该列是否超过100个字符? - Lamak
ALTER TABLE 应该在 UPDATE 之后执行吗? - James
@James 应该可以,否则 ALTER TABLE 将会抛出一个错误。 - Lamak

2
UPDATE Table
 SET [Address] =   CASE 
                       WHEN LEN([Address]) > 100 
                       THEN CAST([Address] AS NVARCHAR(97)) + N'...'
                       ELSE CAST([Address] AS NVARCHAR(100)) 
                   END

现在根据以上语句,你需要改变列的数据类型,因为所有超过100个字符的数据都将被截断。

ALTER TABLE TableName
ALTER COLUMN [Address] NVARCHAR(100)
GO

难道不应该是 WHEN LEN([Address]) > 100 吗? - Lamak

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