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

Chuyển đổi DateTime sang Hex tương đương trong VB.NET

Câu trả lời này chỉ giải quyết việc chuyển đổi .NET DateTimes sang định dạng nhị phân tương đương với datetime của SQL Server datatype, vì vậy tôi tin rằng nó đủ khác biệt để nó đảm bảo một câu trả lời riêng (Tôi đã kiểm tra tại đây tại đây để chắc chắn rằng nó ổn).

Như @Martin Smith đã chỉ ra, định dạng nhị phân của datetime không chỉ đơn giản là một số tích tắc kể từ một thời điểm cụ thể.

datetime được lưu trữ dưới dạng 8 byte, 4 byte đầu tiên là số ngày kể từ 01-01-1900 và 4 byte thứ hai là số "tích tắc" kể từ nửa đêm của ngày hôm đó, trong đó dấu tích là 10/3 mili giây.

Để chuyển đổi .NET DateTime thành biểu diễn nhị phân tương đương, chúng ta cần xác định số ngày kể từ '01 -01-1900 ', chuyển đổi thành hex, sau đó là số lần đánh dấu kể từ nửa đêm, điều này hơi phức tạp vì một lần đánh dấu .NET là 100ns.

Ví dụ:

DateTime dt = DateTime.Now;
DateTime zero = new DateTime(1900, 1, 1);

TimeSpan ts = dt - zero;
TimeSpan ms = ts.Subtract(new TimeSpan(ts.Days, 0, 0, 0));

string hex = "0x" + ts.Days.ToString("X8") + ((int)(ms.TotalMilliseconds/3.33333333)).ToString("X8");

Khi tôi chạy mã này, dt9/14/2011 23:19:03.366 và nó đặt hex tới 0x00009F5E01804321 , được chuyển đổi thành 2011-09-14 23:19:03.363 trong SQL Server.

Tôi tin rằng bạn sẽ luôn gặp vấn đề trong việc lấy ngày chính xác do làm tròn, nhưng nếu bạn có thể sử dụng truy vấn trong đó ngày giờ không phải khớp chính xác, xuống đến mili giây, thì điều này có thể đủ gần.

Chỉnh sửa

Trong nhận xét của tôi dưới câu trả lời đầu tiên tôi đã đăng, tôi đã hỏi về SQL Server 2008, vì datetime2 kiểu dữ liệu lưu trữ thời gian với độ chính xác 100ns (ít nhất là với độ chính xác mặc định), phù hợp nhất với .NET. Nếu bạn quan tâm đến cách nó được lưu trữ ở cấp nhị phân trong SQL Server, hãy xem câu trả lời của tôi cho một câu hỏi cũ hơ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. Hiệu suất của hàm COUNT SQL

  2. Ước tính tham gia máy chủ SQL sử dụng Căn chỉnh thô biểu đồ

  3. Các kiểu dữ liệu VARCHAR và NVARCHAR trong SQL Server

  4. Giới thiệu các biểu thức bảng phổ biến trong SQL Server

  5. Truy vấn trên nhiều cơ sở dữ liệu trên cùng một máy chủ