为什么MS SQL CAST为bigint会导致int溢出?

时间:2016-07-14 17:23:46

标签: sql sql-server casting

为什么以下T-SQL语句:

select CAST(COALESCE('3537601039',0) as bigint)

在针对MS SQL Server 10运行时导致以下错误?

  

varchar值'3537601039'的转换溢出了一个int   列。

是否有一种“更正确”的方式将varchar转换为bigint,以便在数字在bigint范围内时避免此问题?

3 个答案:

答案 0 :(得分:2)

似乎在coalesce中放置不合格的零意味着在明确重新转换为bigint之前转换为较小的int。

以下简单的更改使其成为coalesce字符串值可以解决问题:

select CAST(COALESCE('3537601039','0') as bigint)

答案 1 :(得分:2)

首先发生的事情是你的字符串试图转换为常规的int以匹配0.试试这个:

select CAST(COALESCE('3537601039','0') as bigint)

答案 2 :(得分:2)

先施展,然后再做ISNULL

select ISNULL(CAST('3537601039' as bigint), 0)

select ISNULL(NULLIF(ISNULL(CAST('3537601039' as bigint), 0), 0), 1) + 3537601039

sql server首先发现isnull(string, numeric),数字零默认为int。所以它试图将包含bigint的字符串转换为int。你试图向bigint施放太晚了。

另一次尝试:

select ISNULL('3537601039', 100000000000)