Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

SQL - Il tipo di dati dell'operando datetime2 non è valido per l'operatore di sottrazione

Come accennato nei commenti, non puoi sottrarre timestamp con - operatore. Usa DATEDIFF funzione invece. Per ottenere la differenza tra la riga corrente e i timestamp della riga successiva, usa 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

Modifica:per update una colonna denominata diff per il commento dell'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;