sql >> Database >  >> RDS >> Sqlserver

Query op datetime-velden met milliseconden geeft verkeerd resultaat in SQL Server

SQL Server slaat tijdsdeel op als aantal 1/300 tweede lange tik vanaf middernacht.

23:59:59.999 wordt afgerond op het dichtstbijzijnde vinkje, wat toevallig 00:00:00.000 . is van de volgende 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

In de eerste waarde, het datumgedeelte, 0x9B8F (39823 ) is het aantal dagen sinds Jan 1st, 1900 , en het tijdsdeel, 0 , is het aantal tikken sinds middernacht.

In de tweede waarde, 0x018B81FF (25919999 , of 24 * 60 * 60 * 300 - 1 ) is het maximaal mogelijke aantal tikken sinds middernacht.

Ten slotte heeft de derde waarde de 0 in het tijdgedeelte en het datumgedeelte met één verhoogd.



  1. IBM Worklight - Hoe de OUT-parameter te krijgen bij het aanroepen van een opgeslagen procedure?

  2. Hoe het schema van meerdere PostgreSQL-tabellen in één bewerking te wijzigen?

  3. Krijg alle objecten zonder lus in OOP MySQLi

  4. ORA-00955 naam wordt al gebruikt door een bestaand object