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

Konversikan DateTime ke Hex yang setara di VB.NET

Jawaban ini hanya membahas konversi .NET DateTimes ke format biner yang setara dengan datetime SQL Server tipe data, jadi saya yakin itu cukup berbeda sehingga memerlukan jawaban terpisah (saya memeriksa di sini dan di sini untuk memastikan itu baik-baik saja).

Seperti yang ditunjukkan @Martin Smith, format biner datetime bukan sekadar jumlah centang sejak titik waktu tertentu.

datetime disimpan sebagai 8 byte, 4 byte pertama adalah jumlah hari sejak 01-01-1900 dan 4 byte kedua adalah jumlah "tikus" sejak tengah malam hari itu, di mana kutu adalah 10/3 milidetik.

Untuk mengonversi .NET DateTime ke representasi biner yang setara, kita perlu menentukan jumlah hari sejak '01-01-1900', mengonversinya ke hex, dan kemudian jumlah tick sejak tengah malam, yang sedikit rumit karena centang .NET adalah 100ns.

Misalnya:

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");

Ketika saya menjalankan kode ini, dt adalah 9/14/2011 23:19:03.366 , dan itu mengatur hex ke 0x00009F5E01804321 , yang dikonversi ke 2011-09-14 23:19:03.363 di SQL Server.

Saya yakin Anda akan selalu mengalami masalah dalam mendapatkan tanggal yang tepat karena pembulatan, tetapi jika Anda dapat menggunakan kueri di mana datetime tidak harus sama persis, hingga milidetik, ini mungkin cukup dekat.

Sunting

Dalam komentar saya di bawah jawaban pertama yang saya posting, saya bertanya tentang SQL Server 2008, karena datetime2 tipe data tidak menyimpan waktu dengan akurasi 100ns (setidaknya, itu tidak dengan presisi default), yang cocok dengan baik dengan .NET. Jika Anda tertarik dengan bagaimana itu disimpan pada tingkat biner di SQL Server, lihat jawaban saya ke pertanyaan yang lebih lama.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQRT() Contoh di SQL Server

  2. Bagaimana saya bisa terhubung ke database eksternal dari pernyataan sql atau prosedur tersimpan?

  3. Buat array JSON bersarang menggunakan FOR JSON PATH

  4. Penanganan kesalahan SQL Server:pengecualian dan kontrak klien basis data

  5. Cara Memperbaiki Kesalahan "fungsi datediff mengakibatkan overflow" di SQL Server