sql >> Databáze >  >> RDS >> Sqlserver

SQL – datový typ operandu datetime2 je neplatný pro operátor odečítání

Jak je uvedeno v komentářích, nemůžete odečítat časová razítka pomocí - operátor. Použijte DATEDIFF místo toho. Chcete-li získat rozdíl mezi aktuálním a časovým razítkem dalšího řádku, použijte 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

Upravit:Chcete-li update sloupec s názvem diff podle komentáře 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;


  1. Yii2:automatické vyplňování polí na základě jiného pole ze související tabulky

  2. Může služba PostgreSQL v clusteru OpenShift přijímat externí provoz prostřednictvím exponované trasy

  3. Získejte proměnnou MIN Datum na základě značky v řádku

  4. Jak si pamatuji, kterým směrem by se měl PRIOR ubírat v dotazech CONNECT BY