sql >> Databasteknik >  >> RDS >> Sqlserver

SQL - Operand-datatypen datetime2 är ogiltig för subtractoperator

Som nämnts i kommentarerna kan du inte subtrahera tidsstämplar med - operatör. Använd DATEDIFF funktion istället. För att få skillnaden mellan den aktuella raden och nästa rads tidsstämplar, använd 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

Redigera:För att update en kolumn med namnet diff enligt OP:s kommentar,

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;


  1. hur man korrekt specificerar databasschemat i spring boot?

  2. Optimerar min mysql-fråga för att använda index för sortering

  3. Linq-frågan fungerar inte som förväntat

  4. Finns det något sätt att infoga ett stort värde i en mysql DB utan att ändra max_allowed_packet?