Ceci est dû Data Type Precedence
Lorsqu'un opérateur combine deux expressions de différents types de données, les règles de priorité du type de données Précisons que le type de données avec la priorité inférieure est converti en type de données avec la priorité supérieure. Si la conversion n'est pas une conversion implicite prise en charge , une erreur est renvoyée . Lorsque les deux expressions d'opérande ont le même type de données, le résultat de l'opération a ce type de données .
Note: Can also subtract a number, in days, from a date
Référence: http://msdn.microsoft.com/en-us/library/ms189518.aspx
Date heure a presedence sur varchar et int a presedence sur varchar
Dans votre exemple
select (1 - '+') - CONVERT(datetime,'01/01/2010',101)
Cela réussit dû à 1 - '+'
= 1, qui peut être soustraite d'une date.
select 1 - CONVERT(datetime,'01/01/2010',101) - '+'
cette tentative échoue Becuase 1 anydate = une date, mais lorsque vous essayez de soustraire un « + » vous ne pouvez pas convertir datetime de telle manière.