3

下面的 SQL 有问题吗?这里在转换为 varchar 时没有使用长度。

SELECT CAST('abc' AS varchar)

我应该使用

 SELECT CAST('abc' AS varchar(3))
4

3 回答 3

4

如果您不指定varchar(n)thenn将被假定为 30。例如:如果我们运行下面的查询,我们会得到 30 个字符的输出。

CAST('01234567890123456789012345678901234567890123456789012345678901234567890123456789' as varchar) 

另请查看以下msdn 文章以获得更清晰的信息。

于 2013-07-23T17:33:24.553 回答
1

只要您的字符串不超过 30 个字符,就可以了。
SQL Server 将尝试强制转换为默认长度,即 30 个字符。

如果您尝试转换超过此长度的字符串,您的字符串将被截断为 30 个字符。

例子:

DECLARE @Example VARCHAR(35) = 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa' -- 35 Characters
SELECT LEN(cast(@Example as varchar)) AS [Result]

Result
30
于 2013-07-23T17:26:59.600 回答
0

如果您将使用强制转换将数据插入到具有固定长度的列中,则第二条语句将通过截断数据来帮助您避免“字符串或二进制数据将被截断”错误

SQLException : 字符串或二进制数据将被截断

于 2013-07-23T17:28:55.010 回答