Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

SQL - O tipo de dados do operando datetime2 é inválido para o operador de subtração


Conforme mencionado nos comentários, você não pode subtrair timestamps com - operador. Use DATEDIFF em vez disso. Para obter a diferença da linha atual e os carimbos de data e hora da próxima linha, use OUTER APPLY .
select t2._number,t2._timestamp, 
datediff(microsecond,t2._timestamp,t1._timestamp) as diff
from dbo.tbl t2
outer apply (select t1._timestamp 
             from dbo.tcp t1
             where t1._number = t2._number + 1) t1

Editar:Para update uma coluna chamada diff pelo comentário do OP,
with cte as (          
select t2._number,t2._timestamp, t2.diff,
datediff(microsecond,t2._timestamp,t1._timestamp) as diff_col
from t t2
outer apply (select t1._timestamp 
             from t t1
             where t1._number = t2._number + 1) t1
   )
update cte set diff=diff_col;