sql >> Databáze >  >> RDS >> Sqlserver

Jak funguje funkce převodu SQL při převodu data a času na plovoucí?

DateTime je často reprezentován jako počet dnů od předem určeného data (obecně známého jako epocha) na celočíselné části a procento dne, který uplynul od půlnoci na zlomkové části.

SQL Server není výjimkou, takže převod na Float dává velký smysl. Den 0 je 1. leden 1900 00:00:00 (AFAIK, v žádném konkrétním časovém pásmu, takže jej budete považovat za „místní čas“).

Takže můžete zkusit toto:

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

Pro vaše výsledky tedy uplynulo 40 183 dní od 01.01.1900 00:00:00 a 01.07.2010 00:00:00

Upřesnění:Systémy podobné Unixu používají odlišný přístup k ukládání dat a časů:Sekundy od epochy Unixu (1. ledna 1970 00:00:00 UTC), která je známější jako čas epochy.

[Edit]Formát data v této odpovědi byl změněn na formát RRRRMMDD dne 20140416, po několika nových letech zkušeností s SQL Serverem (a jak řekl @Damien ve svém komentáři) je to jediný bezpečný formát.



  1. Podmíněně definujte kurzor

  2. Jak mohu získat seznam názvů prvků z hodnoty XML v SQL Server

  3. Chyba TOP a ORDER BY SQL

  4. Odstraňte prvních X řádků databáze