sql >> Databasteknik >  >> RDS >> Sqlserver

Fråga på datetime-fält med millisekunder ger fel resultat i SQL Server

SQL Server lagrar tidsdel som nummer 1/300 andra långa tick från midnatt.

23:59:59.999 avrundas till närmaste bock som råkar vara 00:00:00.000 nästa dag.

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

I det första värdet, datumdelen, 0x9B8F (39823 ) är antalet dagar sedan Jan 1st, 1900 , och tidsdelen, 0 , är antalet fästingar sedan midnatt.

I det andra värdet, 0x018B81FF (25919999 eller 24 * 60 * 60 * 300 - 1 ) är det maximalt möjliga antalet fästingar sedan midnatt.

Slutligen har det tredje värdet 0 i tidsdelen och datumdelen ökade med ett.



  1. Parsar MySQL till JavaScript-arrayer genom PHP och jQuery

  2. Hur får jag Java &Postgres enums att fungera tillsammans för uppdatering?

  3. python - Problem med att lagra Unicode-tecken till MySQL med Django

  4. Skapar en utlösare för att uppdatera en sorterings-/ordningskolumn