我正在研究以SQLite3格式存储其数据的家谱软件。 一切正常,除了一个小细节。 并非在所有情况下都能提供确切日期的出生或死亡日期(等)的准确性 所以我有以下准确性:

  • 准确(YYYY-MM-DD)
  • 月(YYYY-MM)
  • 年(YYYY)
  • 年(YYYY +/- 5)
  • 年(YYYY +/- 10)
  • 年(YYYY +/- 50)
  • 世纪

现在,假设我将所有内容存储在单个列中,那么我最终会遇到问题。 由于SQLite3具有儒略日功能,我一直在考虑将精度编码为REAL儒略日的小数部分(无论如何我都不需要小时)。 很好,但是它使SELECT的工作方式复杂化,实际上,这意味着我必须卸载到SQLite3的东西必须在应用程序代码中实现。

什么是一种合理的方法来存储不正确的日期能够快速查询它们?

注意:如果对任何回答者都重要,则使用的语言是Python,但我一般是在问。

===============>>#1 票数:1 已采纳

在查询那些日期值时,最常见的操作可能是检查某个日期是否可能与另一个日期匹配。 为此,您始终需要时间间隔的开始和结束,因此将这两个值存储在数据库中将很有意义。 (称它们为“ Start / End或“ Min / Max或“ Earliest / Latest或其他有意义的名称。)

例如,要查找一个世纪前出生的人:

... WHERE '1913-04-16' BETWEEN BirthDateMin AND BirthDateMax

不等式比较可以使用区间边界之一进行。 例如,要查找可能已经出生一个多世纪的人:

... WHERE BirthDateMin < '1913-04-16'

===============>>#2 票数:0

仅仅因为您要存储日期信息,并不意味着内置的日期类型是您的正确选择。 您的数据要求(日期不准确)意味着进行一些自定义的日期处理工作可能更准确,更长期,并且避免使用内置的日期数据类型。

===============>>#3 票数:0

使用两列。 一栏是SQLite格式的近似日期,尽可能准确。 第二列是日期的准确性(天)。 如果日期绝对正确,则第二列为零。 如果仅知道月份,则日期将是月中,第二列为15天。 可以通过与日期+/-精度列进行比较来进行日期比较。

  ask by 0xC0000022L translate from so

未解决问题?本站智能推荐:

1回复

flask poll应用的sqlite3模式

我是Flask的初学者,我想使用flask和sqlite3作为数据库引擎来构建民意调查应用程序。 我的问题是如何创建两个表“问题”和“选择”,以便每个问题都有一些选择(可能不是固定数字。 我的原始方法相当幼稚:
2回复

如何使用SQLite3格式化.schema输出?

我使用python创建了一些sqlite表架构。 当我使用sqlite3客户端并发出.schema命令时,我可以看到输出是经过预先格式化的,就像在用作executescript()函数的参数的SQL源文件中一样。 我可以使用任何方法来格式化.schema命令的输出吗?
1回复

为什么在使用SQLite3时,用Laravel的架构生成器定义的NOT NULL数据约束允许插入NULL值?

我试图不保存具有null值的雄辩的数据库模型。 我的迁移文件中有此文件: $table->increments('id')->unique(); $table->string('name', 255)->unique(); $table->string('ema
1回复

在PyCharm的数据源无法连接到sqlite3数据库

在我的Windows 7机器上的PyCharm(2.0 Beta 2)中,但是我无法加载sqlite3数据库的内容和架构。 我下载了两个sqlite驱动程序的目录:来自Zentus的sqlitejdbc-v056.jar,以及安全方面来自Xerial sqlitejdbc-3.7.2的安全
1回复

如果SQLite中的架构雾匹配则替换表

我正在研究大量使用SQLite3的应用程序,并希望确保表是正确的:它们是我对它们的期望(具有正确的列,列类型,notnull等)。 我当前的方法是手动检查PRAGMA table_info()返回的数据,并在错误的情况下删除表。 CREATE TABLE IF NOT EXISTS存在则
1回复

在SQLite中读取行与列的相对成本是多少?

我试图围绕SQLite数据库创建包装器,以允许从.net应用程序进行无模式访问。 想法是将每个实体简单地视为一个集合或属性值对。 优先考虑的是开发人员的简单性和易用性,而不是性能,但我不想完全忽略内存使用和光盘读取时间。 包装器的体系结构意味着,将为第一个查询至少读取所有主键(然后
1回复

我如何找出正确的顺序在sqlite中删除表?

我有一组表需要放入Sqlite文件中。 它们具有外键约束。 如何找出正确的顺序删除表格? 还是有一个“删除表列表”命令可以帮我解决这个问题? 我要在网络上搜索什么以获取有关此问题的帮助,因为在与SQL相关的任何网络搜索中添加“订单”都会返回有关ORDER关键字的信息。
1回复

SQLite是否只能从大文本文件中导入指定的字段?

我正在尝试使用2.5Gb文本文件,该文件在制表符分隔的摘录中包含293个字段。 这是前2行+标头的简短示例 。 我只关心前几个字段(lang,Titel,lat,lon,types)。 将文本文件中的某些字段仅加载到SQLite的最快方法是什么? 由于文本文件太大,因此无法在
1回复

在没有索引外键的SQLite数据库中交叉查询多个表

我正在研究一个研究项目,使用IMDb数据集作为我的辅助数据来源。 我从IMDb本身提供的.ftp服务器下载文本格式的整个数据库,并使用IMDbPY python包将所有未排序的信息编译到关系数据库中。 我选择使用SQLite作为我的SQL引擎,因为它能够创建本地存储的数据库,因此它似乎是最不
1回复

向现有SQLite表添加约束

我正在使用SQLite,它不支持在现有表中添加约束 。 所以我不能做这样的事情(仅作为示例): 此方案是否有任何解决方法? 我知道: 我可以为新表添加约束,但这不是新约束(它是由我的ORM EF Core生成的) 我可以做一个“表重建”(重命名表,创建一个新