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

Zapytanie o pola daty i godziny z milisekundami daje zły wynik w SQL Server

SQL Server przechowuje część czasu jako liczbę 1/300 drugie długie tiki od północy.

23:59:59.999 zostaje zaokrąglona do najbliższego tiku, który wypada 00:00:00.000 następnego dnia.

SELECT  CAST(CAST('2009-12-01 00:00:00.000' AS DATETIME) AS BINARY(8)),
        CAST(CAST('2009-12-01 23:59:59.997' AS DATETIME) AS BINARY(8)),
        CAST(CAST('2009-12-01 23:59:59.999' AS DATETIME) AS BINARY(8))



0x00009B8F 00000000    0x00009B8F 018B81FF    0x00009B90 00000000

W pierwszej wartości część daty, 0x9B8F (39823 ) to liczba dni od Jan 1st, 1900 i część czasu, 0 , to liczba tików od północy.

W drugiej wartości 0x018B81FF (25919999 lub 24 * 60 * 60 * 300 - 1 ) to maksymalna możliwa liczba tików od północy.

Wreszcie trzecia wartość ma 0 w części czasu, a część daty wzrosła o jeden.



  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 Server ROWCOUNT_BIG()

  2. SQL Server Wyświetl klucz podstawowy

  3. Jak uzyskać unikalne wartości ze wszystkich kolumn tabeli w SQL Server

  4. Zamów według różnych typów w CASE

  5. Zwracanie n-tej wartości z wyników lub NULL