首页 > 解决方案 > Mito 如何保存多个日期/时间类型

问题描述

我有一些使用不同日期类型的文件:

有些只有年份“2020”,有些只有月份“2020-12”,还有一些日期:“2020-12-21”

所以我想使用间隔。像这样:

(define-table test-date ()
  ((date :col-type :interval
         :initarg :date
         :accessor date)))
(create-dao 'test-date
            :date "2020 years")
(date (find-dao 'test-date))=>((:MONTHS 24240) (:DAYS 0) (:SECONDS 0) (:USECONDS 0))

Q1。这是应该怎么interval用的?

Q2。如何获得年份?

标签: lispcommon-lisp

解决方案


你的使用interval是臭的。看,你存储了一年,你得到了几个月的持续时间。interval用于存储持续时间,特别是在日期算术中使用:  date + INTERVAL expr unit. 所以我不认为你想在这里使用它来存储日期格式。

你可以:

  • 存储日期并将不完整的日期转换为完整的日期:如果您的逻辑可以接受,“2020”将变为“2020-00-00”,
  • 存储一个字符串并使用您自己的验证器功能(您可以使用 Mito 的通货膨胀/通货紧缩机制以正确的数据格式检索您的数据),
  • 要么使用更多可以为空的日期字段(年、月、日……)。

日期和时间操作的食谱:https://lispcookbook.github.io/cl-cookbook/dates_and_times.html


推荐阅读