【发布时间】:2014-10-10 02:01:06
【问题描述】:
使用+ 运算符时,SQL Server 的行为如何?它用于对整数求和并连接字符串
为什么
select '1' + 2 + '33';
返回 36 的结果,而 this
select '1' + '33' + 2;
结果为 135?
【问题讨论】:
标签: sql sql-server sum type-conversion string-concatenation
使用+ 运算符时,SQL Server 的行为如何?它用于对整数求和并连接字符串
为什么
select '1' + 2 + '33';
返回 36 的结果,而 this
select '1' + '33' + 2;
结果为 135?
【问题讨论】:
标签: sql sql-server sum type-conversion string-concatenation
SQL Server 将根据需要进行自动隐式转换。由于int 具有比varchar 更高的数据类型优先级,当SQL Server 似乎将+ 应用于字符串和int 时,它会先将字符串转换为int,然后再应用+ 运算符。
在您的第一个选择中,'1' 似乎是一个字符串,2 是一个 int,因此,它将'1' 转换为一个 int 并将两者相加,得到值 3。对此,'33' - 再次转换为 int - 被添加,最终结果为 36。
在第二种情况下,第一个+ 应用于两个字符串,从而导致字符串连接和'133' 的结果。将int 添加为 2 会导致此字符串变成int,因此最终结果为 135。
请参阅Data Type Precedence 上的宝贵 MSDN 文档,了解类型优先级的所有详细信息。
【讨论】: