Polecam nadal używa typ danych DateTime i ignorując wartości dat - najlepiej przy użyciu statycznej MinDate dla SQL (google). Zapewni to korzyści płynące z pracy z silnie typowanym polem, a jedynym kosztem będzie kilka dodatkowych bajtów.
Jeśli chodzi o zakresy, przechowuj je w dwóch osobnych kolumnach. Następnie możesz odjąć jeden od drugiego, aby określić różnicę.
Edycja: zrobił kilka Googling.
- SQL Server 2008 dodaje typ danych Czas, więc warto wziąć to pod uwagę.
- Można użyć SQL 2005 jest typu DateTime i połączyć go z funkcji CONVERT wyodrębnić tylko HH: MM: SS.mmm
- Różne wersje SQL obsługują różne minimalne daty. Możesz użyć statycznej daty, która będzie obsługiwana przez wszystkich, takich jak 1/1/2000, lub możesz użyć wartości minimalnej SQL 2005 z 1/1/1753 i dołączyć wartości czasu do tego dnia początkowego
Więc jeśli pozostaniesz w 2005 roku, wybierz datę statyczną, np. 1/1/2000 i zapisz swoje czasy. Tak więc 1m: 30s to 2000-1-1 00: 01: 30.000, a 1h: 15m to 2000-1-1 01: 15: 00.000
Możesz wtedy zrobić Date2 - Date1 i otrzymać wynik (1h: 15: m - 1m: 30s) 2000-01-01 01: 13: 45.000. ZMIENIAJ ją, a otrzymasz 1:13:45.
Zauważ, że użycie CONVERT w ten sposób wyłącza jakiekolwiek użycie indeksów w kolumnie datetime –
Interesujące, nie wiedziałem o tym efekcie. Dziękujemy za podpowiedź – STW
Dla przyszłych czytelników, przed użyciem tej metody sprawdź komentarz autorstwa @tvanfosson http://stackoverflow.com/questions/812631/store-time-of-the-day-in-sql?lq=1#comment622411_812669 – Termiux