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

Hàm convert của SQL hoạt động như thế nào khi chuyển đổi datetime thành float?

DateTime thường được biểu thị dưới dạng số ngày từ một ngày được xác định trước (thường được gọi là kỷ nguyên) trên phần nguyên và tỷ lệ phần trăm của ngày đã trôi qua kể từ giữa đêm trên phần thập phân.

SQL Server không phải là ngoại lệ cho điều này, do đó việc chuyển đổi sang Float rất có ý nghĩa. Ngày 0 là ngày 01 tháng 1 năm 1900 00:00:00 (AFAIK, không có múi giờ cụ thể, vì vậy bạn sẽ coi đó là "giờ địa phương").

Vì vậy, bạn có thể thử cách này:

declare @ADate DateTime;
set @ADate = '19000101 00:00:00';
select CONVERT(float, @ADate);  --should print 0
set @ADate = '19000101 12:00:00';
select CONVERT(float, @ADate);  --should print 0.5
set @ADate = '19001231 06:00:00';
select CONVERT(float, @ADate);  --should print 364.25

Vì vậy, đối với kết quả của bạn, 40183 ngày đã trôi qua kể từ 01/01/1900 00:00:00 và 01/07/2010 00:00:00

Làm rõ:Các hệ thống tương tự Unix sử dụng một cách tiếp cận khác để lưu trữ ngày giờ:Giây kể từ kỷ nguyên Unix (ngày 1 tháng 1 năm 1970 00:00:00 UTC), được gọi là thời gian kỷ nguyên.

[Chỉnh sửa] Định dạng ngày trên phản hồi này đã được thay đổi thành định dạng YYYYMMDD vào 20140416, sau một số năm kinh nghiệm mới với SQL Server (và như @Damien đã nói trong nhận xét của anh ấy) đây là định dạng an toàn duy nhấ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. Tính toán giờ làm việc giữa hai ngày

  2. Tạo mảng JSON lồng nhau bằng FOR JSON PATH

  3. SQL Server 2017 Backup -1

  4. Làm cách nào để thay đổi ràng buộc khóa chính bằng cú pháp SQL?

  5. Cách tốt nhất để phân trang kết quả trong SQL Server là gì