如何在SQL数据库中以毫秒精度存储日期时间

时间:2017-01-27 18:11:48

标签: python sql sqlalchemy

浮点值表示日期和时间,精确到毫秒:

import datetime
float_time = 1485538757.29289
print datetime.datetime.fromtimestamp(float_time) 

打印:

2017-01-27 09:39:17.292890

将其存储在db:

from sqlalchemy import Column, DateTime
from sqlalchemy.ext.declarative import declarative_base

Base = declarative_base()

class MyTable(Base):
    __tablename__ = 'mytable'
    time_created = Column(DateTime, nullable=False)

但保存的值会向下舍入为2017-01-27 09:39:17(来自2017-01-27 09:39:17.292890)。有解决方案吗?

2 个答案:

答案 0 :(得分:2)

这取决于您正在使用的SQL数据库。它们的精确度不同:

PostgresQL Default 1 microsecond

MySQL :默认为1秒。 Millisecond / microsecond precision optional之后的version 5.6.4

MariaDB :默认为1秒。毫秒/微秒精度optional since version 5.3

Transact-SQL (Microsoft SQL):Rounded to increments of .000, .003, or .007 seconds

SQLite :日期时间可以存储为具有任意精度的字符串,但"only the first three digits are significant"

Oracle :默认1微秒。 Optional precision to 1 nanosecond

注意:

  • 毫秒:0.001秒
  • Microsecond:0.000001s
  • 纳秒:0.000000001s

答案 1 :(得分:0)

最重要的信息是您在原帖中错过的信息:哪个数据库?既然你后来提到了它的MariaDB,那你就去吧:

来源:https://mariadb.com/kb/en/mariadb/microseconds-in-mariadb/

  

由于MariaDB 5.3,TIME,DATETIME和TIMESTAMP类型,以及   时态函数,CAST和动态列已得到支持   微秒。可以在以下时指定列的日期时间精度   使用CREATE TABLE创建表,例如:

CREATE TABLE example(   col_microsec DATETIME(6),   col_millisec TIME(3) );
  

通常,可以为任何TIME指定精度,   DATETIME或TIMESTAMP列,在括号中,在类型名称后面。   日期时间精度指定小数点后的位数   点,可以是0到6之间的任何整数。如果没有精度   由于向后兼容性原因,指定它被假定为0。

另一个例子:

SELECT CAST('2009-12-31 23:59:59.998877' as DATETIME(3));
-> 2009-12-31 23:59:59.998