Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Jak działa funkcja konwersji SQL podczas konwertowania daty i godziny na zmiennoprzecinkową?

DateTime jest często reprezentowany jako liczba dni od wstępnie określonej daty (zazwyczaj znanej jako epoka) w części całkowitej i jako procent dnia, który upłynął od północy w części ułamkowej.

SQL Server nie jest tu wyjątkiem, dlatego konwersja do Float ma sens. Dzień 0 to 01 stycznia 1900 00:00:00 (AFAIK, bez określonej strefy czasowej, więc należy to uznać za „czas lokalny”).

Możesz więc spróbować tego:

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

Tak więc dla Twoich wyników minęło 40183 dni od 01.01.2001 00:00:00 do 01.07.2010 00:00:00

Wyjaśnienie:Systemy uniksowe używają innego podejścia do przechowywania dat i godzin:Sekundy od epoki Uniksa (1 stycznia 1970 00:00:00 UTC), co jest bardziej znane jako czas epoki.

[Edytuj]Format daty w tej odpowiedzi został zmieniony na format RRRRMMDD 20140416, po kilku latach doświadczeń z SQL Server (i jak powiedział @Damien w swoim komentarzu) jest to jedyny bezpieczny format.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak zainstalować localdb osobno?

  2. Skrypt inwentaryzacji kolekcji SQL Server -3

  3. Projekt bazy danych dla ustawień użytkownika

  4. Sortuj pociski w bazie danych

  5. Jakie mogą być dobre sposoby wdrażania aplikacji internetowych ASP.Net?