为什么以下T-SQL语句:
select CAST(COALESCE('3537601039',0) as bigint)
在针对MS SQL Server 10运行时导致以下错误?
varchar值'3537601039'的转换溢出了一个int 列。
是否有一种“更正确”的方式将varchar
转换为bigint
,以便在数字在bigint
范围内时避免此问题?
答案 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)