user353gre3 Asked: 2014-04-29 16:49:14 +0800 CST2014-04-29 16:49:14 +0800 CST 2014-04-29 16:49:14 +0800 CST 带一个操作数的 '+' 运算符! 772 “+”运算符在以下语句中的行为如何? select + 'taco'; --Result is 'taco' 它是用第一个字符串空白 ('' + 'taco') 进行字符串连接,还是有其他含义? sql-server mysql 2 个回答 Voted Best Answer Paul White 2014-05-04T03:26:35+08:002014-05-04T03:26:35+08:00 “+”运算符在以下语句中的行为如何? 它被解析为一元加号,并被忽略。 以下是对关于该主题的 Connect 项目 718176 的答复(Connect 已停用,并且没有此页面的存档可用): 经过一些调查,此行为是设计使然,因为 + 是一元运算符。所以解析器接受 "+ ,而 '+' 在这种情况下被简单地忽略了。 更改此行为会产生很多向后兼容性影响,因此我们不打算更改它,并且修复会为应用程序代码引入不必要的更改。 (根据Martin Smith对问题的评论生成的社区 Wiki 答案) peterk411 2014-04-29T17:54:55+08:002014-04-29T17:54:55+08:00 根据定义,字符串连接运算符“+”“连接两个或多个”字符串。 http://technet.microsoft.com/en-us/library/ms177561.aspx 此查询成功执行,因为隐含的第二个字符串是非空串联标识(空字符串)。 这与 ; 中的运算符的工作方式相同select +1。隐含的第二个数字是非空加法标识“0”。 由于需要诸如 . 之类的表达式,因此允许使用该语法select -1。既不会执行select 'taco' +也select 1+不会执行,但这只是因为解析器规则。 考虑这些 SQL 语句生成的执行计划(我添加了 top(1) 以获得计划): select top (1) + 'taco' select top (1) '' + 'taco' select top (1) 'taco' 执行计划是相同的。“Compute Scalar”运算符不显示任何串联活动。查询优化器在执行之前简化了身份串联表达式。
它被解析为一元加号,并被忽略。
以下是对关于该主题的 Connect 项目 718176 的答复(Connect 已停用,并且没有此页面的存档可用):
(根据Martin Smith对问题的评论生成的社区 Wiki 答案)
根据定义,字符串连接运算符“+”“连接两个或多个”字符串。 http://technet.microsoft.com/en-us/library/ms177561.aspx
此查询成功执行,因为隐含的第二个字符串是非空串联标识(空字符串)。
这与 ; 中的运算符的工作方式相同
select +1
。隐含的第二个数字是非空加法标识“0”。由于需要诸如 . 之类的表达式,因此允许使用该语法
select -1
。既不会执行select 'taco' +
也select 1+
不会执行,但这只是因为解析器规则。考虑这些 SQL 语句生成的执行计划(我添加了 top(1) 以获得计划):
执行计划是相同的。“Compute Scalar”运算符不显示任何串联活动。查询优化器在执行之前简化了身份串联表达式。