“select integer + datetime + char”和“select integer + char + datetime”的结果

时间:2010-11-10 03:59:52

标签: sql sql-server tsql

为什么:

select 1 - '+' - CONVERT(datetime,'01/01/2010',101) 

...查询返回结果,并且:

select 1 - CONVERT(datetime,'01/01/2010',101) - '+' 

...给出错误?

1 个答案:

答案 0 :(得分:4)

这是因为Data Type Precedence

  

当操作员组合两个时   不同数据类型的表达式,   数据类型优先级的规则   用数据类型指定   较低的优先级转换为   优先级较高的数据类型。   如果转换不受支持   隐式转换,错误是   回。当两个操作数   表达式具有相同的数据类型,   操作的结果就是这样   数据类型。

注意: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 =一个日期,但是当你试图减去'+'时,你无法以这种方式转换日期时间。