为什么:
select 1 - '+' - CONVERT(datetime,'01/01/2010',101)
...查询返回结果,并且:
select 1 - CONVERT(datetime,'01/01/2010',101) - '+'
...给出错误?
答案 0 :(得分:4)
当操作员组合两个时 不同数据类型的表达式, 数据类型优先级的规则 用数据类型指定 较低的优先级转换为 优先级较高的数据类型。 如果转换不受支持 隐式转换,错误是 回。当两个操作数 表达式具有相同的数据类型, 操作的结果就是这样 数据类型。
注意:Can also subtract a number, in days, from a date
参考:http://msdn.microsoft.com/en-us/library/ms189518.aspx
日期时间优先于varchar,而int优先于varchar
在你的例子中
select (1 - '+') - CONVERT(datetime,'01/01/2010',101)
由于1 - '+'
= 1而成功,可以从日期中减去。
select 1 - CONVERT(datetime,'01/01/2010',101) - '+'
这失败了因为1-anydate =一个日期,但是当你试图减去'+'时,你无法以这种方式转换日期时间。