【问题标题】:SQL Server type casting behaviourSQL Server 类型转换行为
【发布时间】: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


    【解决方案1】:

    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 文档,了解类型优先级的所有详细信息。

    【讨论】:

      猜你喜欢
      • 2017-03-03
      • 2012-06-26
      • 1970-01-01
      • 2020-07-31
      • 1970-01-01
      • 2020-02-02
      • 2012-02-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多