Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Permintaan pada bidang datetime dengan milidetik memberikan hasil yang salah di SQL Server

SQL Server menyimpan bagian waktu sebagai jumlah 1/300 kutu panjang kedua dari tengah malam.

23:59:59.999 dibulatkan ke tick terdekat yang kebetulan 00:00:00.000 hari berikutnya.

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

Pada nilai pertama, bagian tanggal, 0x9B8F (39823 ) adalah jumlah hari sejak Jan 1st, 1900 , dan bagian waktu, 0 , adalah jumlah tick sejak tengah malam.

Pada nilai kedua, 0x018B81FF (25919999 , atau 24 * 60 * 60 * 300 - 1 ) adalah jumlah kutu maksimum yang mungkin sejak tengah malam.

Terakhir, nilai ketiga memiliki 0 di bagian waktu dan bagian tanggal bertambah satu.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ubah ke database ke 'online' dan setel db ke 'multi-pengguna'

  2. Ubah 'waktu' menjadi 'datetime2' di SQL Server (Contoh T-SQL)

  3. Beberapa klausa OUTPUT dalam perintah SQL MERGE/INSERT/DELETE?

  4. 4 byte unsigned int di SQL Server?

  5. Bagaimana cara mengembalikan ke database yang berbeda di SQL Server?