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

Sai mili giây khi chuyển đổi từ XML sang SQL Server datetime

Có, SQL Server thời gian làm tròn thành 3.(3) mili giây:

SELECT CAST(CAST('2009-01-01 00:00:00.000' AS DATETIME) AS BINARY(8))
SELECT CAST(CAST('2009-01-01 00:00:01.000' AS DATETIME) AS BINARY(8))

0x00009B8400000000
0x00009B840000012C

Như bạn thấy, DATETIME này khác nhau bởi 1 thứ hai, và các đại diện nhị phân của chúng khác nhau 0x12C , đó là 300 ở dạng thập phân.

Điều này là do SQL Server lưu trữ time một phần của DATETIME dưới dạng một số 1/300 tích tắc thứ hai từ nửa đêm.

Nếu bạn muốn chính xác hơn, bạn cần lưu trữ TIME một phần như một giá trị riêng biệt. Giống như, thời gian lưu trữ được làm tròn đến một giây dưới dạng DATETIME và mili giây hoặc bất kỳ độ chính xác nào bạn cần làm INTEGER trong các cột khác.

Điều này sẽ cho phép bạn sử dụng DATETIME phức tạp số học, như thêm tháng hoặc tìm ngày trong tuần vào DATETIME và bạn chỉ có thể thêm hoặc bớt phần nghìn giây và nối kết quả dưới dạng .XXXXXX+HH:MM để lấy XML hợp lệ đại diện.



  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 đổi tên cơ sở dữ liệu SQL Server bằng T-SQL

  2. Phân tích cú pháp OpenXML với nhiều phần tử cùng tên

  3. 2 cách trả về danh sách máy chủ được liên kết trong SQL Server bằng T-SQL

  4. Làm cách nào để bạn thoát khỏi dấu ngoặc kép bên trong hàm 'chứa' toàn văn bản SQL?

  5. Tôi cần danh sách quốc gia trong T-SQL