【发布时间】:2016-05-27 08:21:33
【问题描述】:
我遇到了一个错误,我使用 CAST(Col1 AS INT) + CAST(Col2 AS INT),其中 Col1 和 Col2 都是 VARCHAR,当 Col1 或 Col2 为空白时,我得到了有效的结果,我没想到会出现这种情况。我检查并 CAST(和 CONVERT)都具有将空白替换为 0 的默认行为:
SELECT CAST('' AS INT)
SELECT CONVERT(INT, '')
我检查了info page,但看不到任何参考资料来解释为什么会出现这种行为(或通过服务器设置进行更改)。我当然可以解决这个问题,但我想问为什么这是这种行为,因为我认为它不直观。
我实际上宁愿这个CAST 失败或给NULL,是否有某个服务器设置会影响这个?
【问题讨论】:
-
这不是错误,它就是这样设计的。
-
这是基础数学。
integer不能是空白,但在 SQL DB 中它可以是NULL。 -
'' to 0, NULL to NULL and 'invalid number' to error -
我并没有试图说明 SQL 中的这种行为是一个错误,它是我们产品中的一个错误导致我发现了这种行为,我质疑我是否可以改变它,因为我认为这不是直觉行为
标签: sql-server