Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Truy vấn trên các trường datetime có mili giây cho kết quả sai trong SQL Server

SQL Server lưu trữ phần thời gian dưới dạng số 1/300 tích tắc dài thứ hai từ nửa đêm.

23:59:59.999 được làm tròn đến dấu kiểm gần nhất là 00:00:00.000 của ngày hôm sau.

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

Trong giá trị đầu tiên, phần ngày, 0x9B8F (39823 ) là số ngày kể từ Jan 1st, 1900 và phần thời gian, 0 , là số lượng tích tắc kể từ nửa đêm.

Trong giá trị thứ hai, 0x018B81FF (25919999 hoặc 24 * 60 * 60 * 300 - 1 ) là số lượng bọ ve lớn nhất có thể kể từ nửa đêm.

Cuối cùng, giá trị thứ ba có 0 trong phần thời gian và phần ngày tăng lên một.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách lấy Chuỗi kết nối từ cơ sở dữ liệu

  2. SQL Server 2008 Mgmt Studio:Cú pháp không chính xác gần bất kỳ thứ gì sử dụng truy vấn con

  3. Giá trị rỗng trong kiểu dữ liệu varbinary tham số

  4. Kết hợp nhiều hàng thành một hàng và nối các cột tùy thuộc vào số lượng hàng

  5. Có thể sử dụng câu lệnh Case trong mệnh đề sql From không