sql >> Database teknologi >  >> RDS >> Sqlserver

Forespørgsel på datetime-felter med millisekunder giver forkert resultat i SQL Server

SQL Server gemmer tidsdel som nummer på 1/300 anden lange kryds fra midnat.

23:59:59.999 bliver afrundet til det nærmeste flueben, som tilfældigvis er 00:00:00.000 næste 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 den første værdi, datodelen, 0x9B8F (39823 ) er antallet af dage siden Jan 1st, 1900 , og tidsdelen, 0 , er antallet af kryds siden midnat.

I den anden værdi, 0x018B81FF (25919999 eller 24 * 60 * 60 * 300 - 1 ) er det maksimalt mulige antal kryds siden midnat.

Endelig har den tredje værdi 0 i tidsdelen og datodelen steget med én.



  1. Hvor meget diskplads er nødvendig for at gemme en NULL-værdi ved hjælp af postgresql DB?

  2. VÆLG Fra MySQL-visning med HAVING-klausul returnerer et tomt resultatsæt

  3. hvordan man sender parameter med anførselstegn

  4. Kan ikke erklære variabel inde i funktion på PostgreSQL