【问题标题】:Partially null dates in MySQL/DjangoMySQL/Django 中的部分空日期
【发布时间】:2010-10-13 15:41:33
【问题描述】:

我目前正在将我的网站从 PHP 转换为 Django,但由于我是 Python 新手,所以我很难理解一些事情。

有时我的数据库中的日期不完整(即我可能不知道日期甚至月份),因此目前有三个整数字段:date_yeardate_monthdate_day

我注意到 MySQL 接受了“部分空”date 字段(例如 2004-04-00、1994-00-00),但 Django 只是将它们视为“完全”空。

我只想以下列格式显示这些日期:

  • 16 March 2009(完全已知)
  • March 2009(不详)
  • 2009(未知日期和月份)

我认为我将无法在 MySQL 中使用正确的 date 字段,并且我必须在模型中创建一个虚假的 date 然后使用自定义模板过滤器;有人可以帮忙吗?

【问题讨论】:

    标签: mysql django date


    【解决方案1】:

    当 MySQL 在ALLOW_INVALID_DATES 模式下运行时,它不会对输入执行任何验证检查,因此您可以存储无效日期。这是标准 SQL 的扩展,因为 Django 是跨数据库兼容的,所以不支持它。此外,Django 将日期转换为也不支持部分日期的 Python 日期对象。

    最好的办法是将列一分为三,或者将日期存储为文本并自行处理。

    【讨论】:

      【解决方案2】:

      您可以将两个日期时间存储为一个范围。如果午夜到午夜的意思是“这一天的某个时候”,并且如果范围是整个月,那就是你所知道的。如果你知道确切的时间,他们会是平等的。

      【讨论】:

        【解决方案3】:

        我正在寻找类似问题的解决方案,但使用的是 PostgreSQL。

        Fuzzy date matching in PostgreSQL

        也许你可以适应这样的事情?这有点离谱,我知道。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-07-12
          • 2016-09-12
          • 1970-01-01
          • 1970-01-01
          • 2013-02-27
          相关资源
          最近更新 更多