Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

SQL — Operandowy typ danych datetime2 jest nieprawidłowy dla operatora odejmowania

Jak wspomniano w komentarzach, nie można odjąć znaczników czasu za pomocą - operator. Użyj DATEDIFF zamiast tego. Aby uzyskać różnicę między bieżącym wierszem a znacznikami czasu następnego wiersza, użyj 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

Edycja:update kolumna o nazwie diff zgodnie z komentarzem 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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL:Użyj pól obliczeniowych z SELECT w klauzuli WHERE

  2. Utwórz indeks na częściowej kolumnie CHAR

  3. Zmień funkcję o wartościach przechowywanych w tabeli w SQL Server

  4. Niestandardowe ciągi formatu liczbowego obsługiwane przez FORMAT() w SQL Server

  5. Utwórz obiektową matrycę w SQL Server