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

Błędne milisekundy podczas konwersji z formatu XML na datę i godzinę w programie SQL Server

Tak, SQL Server zaokrągla czas do 3.(3) milisekundy:

SELECT CAST(CAST('2009-01-01 00:00:00.000' AS DATETIME) AS BINARY(8))
SELECT CAST(CAST('2009-01-01 00:00:01.000' AS DATETIME) AS BINARY(8))

0x00009B8400000000
0x00009B840000012C

Jak widać, te DATETIME różnią się o 1 po drugie, a ich reprezentacje binarne różnią się o 0x12C , czyli 300 w systemie dziesiętnym.

Dzieje się tak, ponieważ SQL Server przechowuje time część DATETIME jako liczba 1/300 drugie tyka od północy.

Jeśli chcesz uzyskać większą precyzję, musisz zapisać TIME część jako oddzielna wartość. Na przykład, przechowuj czas zaokrąglony do sekundy jako DATETIME , oraz milisekundy lub dowolna precyzja, jakiej potrzebujesz jako INTEGER w innych kolumnach.

Umożliwi Ci to użycie złożonej DATETIME arytmetyki, takie jak dodawanie miesięcy lub znajdowanie dni tygodnia w DATETIME i możesz po prostu dodać lub odjąć milisekundy i połączyć wynik jako .XXXXXX+HH:MM aby uzyskać prawidłowy XML reprezentacja.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. pojedyncze zapytanie do usunięcia z wielu tabel na serwerze sql

  2. Jak zmienić schemat obiektu (tabela, widok, procedura składowana) w bazie danych SQL Server — samouczek SQL Server / TSQL, część 28

  3. Przyznawanie dostępu do jednej bazy danych użytkownikom/rolom innego

  4. SQL Server — Przeanalizuj wewnętrzne elementy sp_spaceused

  5. Aktualizacja 4 milionów rekordów na serwerze SQL przy użyciu listy identyfikatorów rekordów jako danych wejściowych