Sql server 如果我在数据库中以浮点数形式存储datetime,会有什么影响?

Sql server 如果我在数据库中以浮点数形式存储datetime,会有什么影响?,sql-server,datetime,Sql Server,Datetime,如果我在数据库中以浮点数形式存储datetime,会有什么影响?我这样做有很好的理由,所以不要抱怨:) 编辑:我正在考虑将convert(float,@thedate)存储在一个float列中。一个的精度损失。缺乏决心是另一个原因 这是一个小问题,但浮点版本IEEE 754与VAX浮点相比。一个是精度损失。缺乏决心是另一个原因 这是一个小问题,但浮点版本IEEE 754与VAX浮点相比。如果要将数据存储为浮点,我认为最好将历元后的秒数存储为浮点,而不是将日期时间存储为浮点。如果要将数据存储为浮点

如果我在数据库中以浮点数形式存储datetime,会有什么影响?我这样做有很好的理由,所以不要抱怨:)


编辑:我正在考虑将convert(float,@thedate)存储在一个float列中。

一个的精度损失。缺乏决心是另一个原因


这是一个小问题,但浮点版本IEEE 754与VAX浮点相比。

一个是精度损失。缺乏决心是另一个原因


这是一个小问题,但浮点版本IEEE 754与VAX浮点相比。

如果要将数据存储为浮点,我认为最好将历元后的秒数存储为浮点,而不是将日期时间存储为浮点。

如果要将数据存储为浮点,我认为最好将自历元起的秒存储为浮点,而不是将日期时间存储为浮点。

SQLite使用时间格式(少数可用格式之一),其中(64位)双浮点使用整数部分表示自历元起的天,小数部分表示一天的分数。它似乎工作得很好

请参阅“格式12是以浮点值表示的儒略日数。”

使用15位小数可以获得几千年的毫秒精度

根据,JD 9999999.99999是CE 22666 12月20日11:59:59.1 UT星期四

SQLite使用一种时间格式(少数可用格式之一),带有一个(64位)双浮点数,使用整数部分表示自历元起的天数,小数部分表示一天的小数部分。它似乎工作得很好

请参阅“格式12是以浮点值表示的儒略日数。”

使用15位小数可以获得几千年的毫秒精度


根据,JD 9999999.99999是CE 22666 12月20日11:59:59.1 UT星期四。。。维护的基本问题;当其他人加入到项目中,在DB中看到datetime的浮点值,并试图对其进行错误处理,或试图将其重构为适当的类型,或只是花费数小时仔细研究代码以了解到底发生了什么。通过广泛记录正在发生的事情以及为什么要这样做,整个维护问题在某种程度上可以得到缓解,我强烈建议这样做。

艾伦所说的,再加上。。。维护的基本问题;当其他人加入到项目中,在DB中看到datetime的浮点值,并试图对其进行错误处理,或试图将其重构为适当的类型,或只是花费数小时仔细研究代码以了解到底发生了什么。整个维护问题在某种程度上可以通过广泛地记录正在发生的事情以及为什么要这样做而得到缓解,我强烈建议这样做。

事实上,据我所知,MSSQL和Oracle实际上在内部将日期时间存储为浮点数(日期和小数天)


事实上,据我所知,MSSQL和Oracle实际上在内部将日期时间存储为浮点数(如天和分数天)


无论精度如何-取决于您选择的起点数字,您可能在比较时遇到问题


如果您无法为每个datetime创建精确的浮点值,您可能还有两个datetime,如果它们解析为不同的浮点值,则会以一种方式进行比较。

无论精度如何-取决于您选择的起始点数字,您在比较时可能会遇到问题


如果您无法为每个datetime创建精确的浮点值,您可能还有两个datetime,如果它们解析为不同的浮点值,则会进行一种方式和另一种方式的比较。

您会失去一些精度。我在SQL Server中进行了以下测试:

select getdate(), cast(getdate() as float), cast(cast(getdate() as float) as datetime)

您可以看到,如果重复运行此操作,在转换过程中可能会损失多达4毫秒的时间。如果您的数据库支持smalldatetime这样的数据类型,并且您只需要精确到第二种,那么您可以消除这种差异。

您会失去一些精度。我在SQL Server中进行了以下测试:

select getdate(), cast(getdate() as float), cast(cast(getdate() as float) as datetime)
您可以看到,如果重复运行此操作,在转换过程中可能会损失多达4毫秒的时间。如果您的数据库支持smalldatetime这样的数据类型,并且只需要精确到第二种,那么您可以消除这种差异。

这是一篇关于“消除SQL Server DATETIME数据类型的神秘性”的好文章

通过阅读,看起来datetime存储为2个4字节的整数,或者您可以使用二进制(8)

正如其他人所说,以浮点形式存储会使您失去一些精度。

这是一篇关于“消除SQL Server日期时间数据类型的神秘性”的好文章

通过阅读,看起来datetime存储为2个4字节的整数,或者您可以使用二进制(8)


正如其他人所说,以浮点形式存储会使您失去一些精度。

什么会咬到您?首先,float不是一个精确的数据类型,因此可能永远不会用于任何需要精确性的数据类型。接下来,float不会自动拒绝错误的日期。接下来,如果要执行任何日期函数,首先必须将数据转换回datetime数据类型,这是对服务器资源的浪费


你说你有一个很好的理由想这样做,但有一个线索,那可能是什么,我认为日期应该存储在数据类型中,以处理它们。

什么会咬你?首先,float不是一个精确的数据类型,因此可能永远不会用于任何需要精确性的数据类型。接下来,float不会自动拒绝错误的日期。接下来,如果要执行任何日期函数,首先必须将数据转换回datetime数据类型,这是对服务器资源的浪费


你说你有一个很好的理由想这样做,但有一个线索,那可能是什么,我认为日期应该存储在数据类型中,以处理它们。

使用浮点的一个潜在缺点是你失去了使用 select to_char(sysdate, 'YYYY-MM-DD HH24:MI:SS') as Date_Value, dump(sysdate) as Internals from dual; DATE_VALUE INTERNALS ------------------- ------------------------------------------------------------ 2009-05-28 09:51:12 Typ=13 Len=8: 217,7,5,28,9,51,12,0 1 row selected