为什么输出此查询:
declare @currentDate as datetime set @currentDate ='01/07/2010' select convert(float, @currentdate)
…是40183吗?
因此,对于那些对我的问题感到困惑的人,我的问题是如何在不执行上述查询的情况下知道上述查询的结果?
DateTime通常表示为从整数部分上的预定日期(通常称为纪元)开始的天数,而在小数部分上表示从午夜开始经过的一天的百分比。
SQL Server也不例外,因此转换为Float非常有意义。第0天是1900年1月1日00:00:00(AFAIK,没有特定的时区,因此您应将其视为“本地时间”)。
因此,您可以尝试以下操作:
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
因此,根据您的结果,自01/01/1900 00:00:00和2010年1月7日00:00:00以来已经过去了40183天
说明:类似于Unix的系统使用不同的方法来存储日期时间:自Unix纪元(1970年1月1日00:00:00 UTC)以来的秒数,这又称为纪元时间。
[编辑]该回复的日期格式已在20140416上更改为YYYYMMDD格式,这是使用SQL Server的一些新经验(并且正如@Damien在他的评论中所说),这是唯一安全的格式。