![]() |
1
7
首先,谢谢你的回答。从目前的情况来看,没有一个能很好地解决我的问题,但是,为了你的辩护,我应该补充一点,我没有给出所有的要求。但每一个都帮助我思考我的问题,你的一些想法是我最终解决方案的一部分。 所以我的最终解决方案,在DB方面,是使用 瓦尔查尔 00 对于没有月份和/或日期的月份和日期(如 MySQL中的字段)。通过这种方式,这个字段可以与任何数据库一起工作,数据可以由一个人使用一个简单的客户机(比如mysql客户机、phpmyadmin等)直接、轻松地读取、理解和编辑。这是一个要求。它也可以导出到Excel/CSV没有任何转换等缺点是,格式是不强制(除了在Django)。有人可以写 '不是约会' 或者在格式上做一个错误,DB会接受它(如果你对这个问题有想法…)。 这样也可以做所有的 特殊的 a的查询 日期
在Django方面,我做了两件事。首先,我创建了一个
到目前为止,它运行得非常好(我基本上已经完成了大量的单元测试)。 |
![]() |
2
2
您可以将部分日期存储为整数(最好是存储在一个以您正在存储的日期部分命名的字段中,例如
编辑 如果你需要真正的日期功能,你可能需要真正的,而不是部分,日期。例如,“get everything after 2010-0-0”的返回日期是包括2010年还是仅包括2011年及以后的日期?2010年5月的另一个例子也是如此,不同语言/客户端处理部分日期的方式(如果它们完全支持的话)可能非常特殊,而且不太可能与MySQL的实现相匹配。
另一方面,如果你储存
第二次编辑
您唯一的另一个(也许是最好的)选择是存储真正有效的日期,并在应用程序中为它们的含义制定一个约定。一个名为like的DATETIME字段
|
![]() |
3
2
听起来像是要存储日期间隔。在Python中,这一点(据我所知)最容易通过存储两个datetime.datetime对象来实现,一个指定日期范围的开始,另一个指定结束。与用于指定列表切片的方式类似,端点本身不会包含在日期范围中。 例如,此代码将日期范围实现为命名元组:
甚至可以添加一些魔法:
但是,将这样一个对象映射到数据库字段要复杂一些,因此实现它最好只需将这两个字段分开,然后将它们组合起来。我猜这取决于DB框架;我对Python的这方面还不是很熟悉。 无论如何,我认为关键是把“部分日期”看作一个范围,而不是一个简单的值。 编辑
添加更多的魔法方法来处理
但是,这意味着范围和范围内的日期相等,这是不正确的,因为它意味着2010年5月等于2010年,因为2010年5月4日等于这两者。你最后会变成这样
因此,实现这样的方法可能更好
|
![]() |
4
1
你能把日期和一个标志一起存储吗?这个标志告诉你有多少日期是有效的?
那么,
|
![]() |
5
1
虽然不是在Python中,但下面是一个在Ruby中如何解决相同问题的示例—使用单个整数值和按位运算符存储年、月和日,其中月和日是可选的。 https://github.com/58bits/partial-date
我相信类似的解决方案也可以用Python编写。 要持久化日期(可排序),只需将整数保存到数据库中。 |
|
kaiselwyvrn · 我无法打开Visual Studio项目 1 年前 |
![]() |
4SadMemeXD · 无法在Django中选择相关类别 2 年前 |
![]() |
Agrim Singh · 用户数据。名称未显示用户名 2 年前 |
![]() |
Peloucvo · 用数据库中的数据填充JTable 2 年前 |
![]() |
Montaser Majid · 用于从多行中提取单行的SQL查询 2 年前 |
![]() |
Max J. · 用整数作为键将dict写入csv 2 年前 |