1

我试图在 32,759 个字符后截断结果,因为这是 excel 中的字符限制,这就是我的结果将被粘贴的地方。

到目前为止我尝试过的两种方法:

CONVERT(varchar(max), substring(comment,1,37259)) as [Comment]
CONVERT(varchar(max), ( substring(comment,1,8000) + substring(comment,8001,16000)...)) as [comment]

编辑:似乎数据没有进入 varchar(max) 因为它返回的结果只有 8000 个字符。这是选择语句的一部分。我得到超过 32759 个字符的结果没有问题,只是它们在粘贴到 excel 时会进入下一行 - 这就是我试图截断的原因。

4

2 回答 2

2

想通了,如果其他人遇到这个问题,不妨把它扔掉:

convert(varchar(max), ( cast(substring(comment,1,8000) as varchar(max)) +     
cast(substring(comment,8001,8000) as varchar(max)) + 
cast(substring(comment,16002,8000) as varchar(max)) + 
cast(substring(comment,24003,8000) as varchar(max)) + 
cast(substring(comment,32004,755) as varchar(max)) )) as 
[comment]

看起来通过不强制转换每个部分,数据大小被设置为可以容纳所有部分的数据大小/类型。

于 2013-02-12T20:30:37.717 回答
1

所有这些东西都不应该是必要的。如果commentvarchar(max),你应该可以说:

SUBSTRING(comment, 1, 37259)

如果是textntext那么您需要先转换它:

SUBSTRING(CONVERT(VARCHAR(MAX), comment), 1, 37259)

(这显然比您的解决方案更整洁。)

于 2013-02-12T20:53:50.733 回答