Nói cụ thể, tôi chỉ cần giờ: phút nhưng nói tôi có đối tượng .NET TimeSpan, tôi nên lưu trữ nó như thế nào trong cơ sở dữ liệu SQL (CE)?Cách tốt nhất để đại diện cho một khoảng thời gian trong SQL Server CE là gì?
Trả lời
Tôi khuyên bạn nên sử dụng một thời gian dài để thể hiện số lượng ticks. Đó là những gì TimeSpan sử dụng làm đại diện nội bộ của nó. Điều này cho phép bạn dễ dàng hoàn nguyên đối tượng của mình bằng phương thức Timespan.FromTicks() và xuất ra cơ sở dữ liệu bằng cách sử dụng Timespan.Ticks property. Đơn vị nhỏ nhất của thời gian trong .NET là dấu tích, tương đương với 100 nano giây
SQL CE không có loại thời gian hoặc loại do người dùng xác định, do đó, lựa chọn của bạn là datetime hoặc int đại diện phút. Nếu thời gian lớn nhất bạn cần lưu trữ là 23:59 = 23 * 60 + 59 = 1439 = số phút trong một ngày bắt đầu từ phút 0, smallint là loại tích phân nhỏ nhất sẽ phù hợp với phạm vi đó.
Chống lại sự cám dỗ để lưu trữ giờ và phút trong các cột riêng biệt dưới dạng các vết lốm đốm. Điều đó sẽ sử dụng cùng một không gian như một smallint duy nhất, nhưng sau đó mọi phép tính của thời gian sẽ yêu cầu nhân giờ bằng 60 và thêm phút, và mỗi order by
sẽ yêu cầu hai cột thay vì một.
Lưu trữ dưới dạng phút; trưng bày, bạn có thể tách thành giờ phút và phút với
select floor(absminutes/60) as hours, absminutes % 60 as minutes,
from some table
order by absminutes;
Tôi muốn đặt tên cho cột (s) minutes
, hoặc absminutes
(phút tuyệt đối) nếu bạn muốn phân biệt biên bản 1439 trong một ngày từ 0-59 phút trong một giờ.
Để chuyển đổi từ giá trị cơ sở dữ liệu sang đối tượng thời gian, hãy sử dụng ctor Timespan(int, int, int)
như thế này new TimeSpan(floor(absminutes/60), absminutes % 60, 0)
hoặc (tốt hơn) ctor Timespan(long)
với new Timespan(absminutes * TimeSpan.TicksPerMinute)
.
Để chèn hoặc cập nhật cơ sở dữ liệu từ đối tượng Thời gian, đặt thành vô hiệu thành someTimespan.TotalMinutes % 1440
.
Lưu trữ dưới dạng varchar. Lưu vào sql sử dụng TimeSpan.ToString()
. Đọc từ sql là:
TimeSpanObj = TimeSpan.Parse(fieldValue)
Tại sao điều này lại bị giảm giá? Đó là một gợi ý hợp pháp và nếu bạn phải chỉnh sửa trực tiếp dữ liệu SQL, sẽ dễ dàng hơn khi viết "2 phút" là ''00: 02'' thay vì '1200000000' –
Tôi hiện đang xem xét sử dụng SQL Thời gian để xử lý, nhưng nó sẽ không hoạt động> = 24 giờ.
Lợi ích bao gồm dễ đọc, dễ sử dụng trong cả SQL và mã, nhưng sự sụp đổ là bạn chỉ có một khoảng thời gian nhỏ để chơi cùng.
declare @delay table (DelayTime Time(3))
insert into @delay values ('00:10:00.000')
select getdate() as nowtime, getdate()+DelayTime as nowPlusTen from @delay
và
SqlDataReader dr = cmd.ExecuteReader();
DelayTime = (TimeSpan) dr["DelayTime"];
- 1. Cách tốt nhất để thêm khoảng thời gian trong PHP là gì?
- 2. Cách tốt nhất để cắt ngắn một ngày trong SQL Server là gì?
- 3. Chèn hàng loạt trong SQL Server CE
- 4. Đây có phải là cách tốt nhất để đại diện cho thập kỷ với TimeSpan không?
- 5. Cách tốt nhất để đại diện cho các cấp độ trong một cuộn phụ 2D là gì?
- 6. Đại diện giá trị tốt nhất cho boolean trong DICOM là gì?
- 7. Thời gian chạy hiện đại là gì?
- 8. Cách tốt nhất để xác định xem bảng tạm thời tồn tại trong SQL Server là gì?
- 9. Thư viện đại diện thời gian GPS
- 10. Cách xử lý lỗi SQL Server T-SQL thực tiễn tốt nhất là gì?
- 11. Cách tốt nhất để giữ chỉ mục thời gian thực là gì?
- 12. thu nhỏ hoặc nhỏ gọn trong Sql Server CE?
- 13. Khóa bảng SQL trong một khoảng thời gian
- 14. Khoảng thời gian LocalDate trong thời gian Joda
- 15. Cách tốt nhất để lưu trữ datetimes (dấu thời gian) trong CouchDB là gì?
- 16. Cách tốt nhất để có được ngày tháng và thời gian ở Clojure là gì?
- 17. Vòng lặp Scala cho một khoảng thời gian nhất định
- 18. Cách tốt nhất để cắt khoảng trắng từ một chuỗi trong Cocoa Touch là gì?
- 19. SQL: Cách tốt nhất để xây dựng một dòng thời gian từ hai bảng lịch sử
- 20. Cách tốt nhất để đối phó với toán học thời gian trong Perl là gì?
- 21. Dấu thời gian unix là cách tốt nhất để lưu dấu thời gian?
- 22. Cách tốt nhất để phát hiện sự hiện diện của SMO là gì?
- 23. Cách nhanh nhất để có được một DataTable vào SQL Server là gì?
- 24. Cách tốt nhất để bắt đầu và dừng SQL Server từ dòng lệnh là gì?
- 25. Giao diện người dùng để chụp một khoảng thời gian hoặc thời lượng
- 26. Cách tốt nhất để lưu trữ các giá trị khoảng thời gian trong MySQL?
- 27. Cách tốt nhất để chờ một thời gian nhất định (nói 10 giây) trong C# là gì?
- 28. Cách tốt nhất để đồng bộ thời gian máy tính với máy chủ thời gian internet là gì?
- 29. Phân trang dữ liệu trong SQL Server CE (Compact Edition)
- 30. Cách tốt nhất để trình bày các quy tắc thời gian mùa hè là gì?
Đó là chính xác những gì tôi đang làm về dự án tôi đang làm việc trên. Lớp ORM sau đó thực hiện chuyển đổi như bạn đã nói, giữa TimeSpan và ve, qua lại, không có chỗ cho lỗi. Ngoài ra, một phần thưởng phụ là bạn đã có tất cả độ chính xác mà bạn có thể sẽ cần. Nếu bạn gắn bó với phút, bạn đã có một vấn đề thực sự nếu bạn bộ phận tiếp thị nói "Làm thế nào nó sẽ được để có được độ chính xác xuống giây?" –
Tốt, dù là một lần đánh dấu được bảo đảm để nhận chính xác 100 nano giây? – SepehrM
Tài liệu khung không đề cập đến bất kỳ phòng lung linh nào: https://msdn.microsoft.com/en-us/library/system.datetime.ticks(v=vs.110).aspx –