如何在没有一年零件的情况下存储生日?

Fra*_*mer 8 postgresql schema date date-of-birth

类似的问题:Postgres生日选择

我们正在设计一个新功能:我们将存储人们生日的月和日部分,而不是年份.因此,在圣诞节出生的用户将拥有生日"12/25".问题是,我们怎样才能在postgres中最好地代表这一点?

  1. date专栏需要一年的时间,并且还会拒绝非发展日的平日.我们可以用任意闰年存储所有生日,例如'1972-12-25',但这有点像kludge.
  2. 我们可以使用两int列,一个用于月份,一个用于一年,但我们完全丢失了pg的内置日期检查,您可以存储日期'02-31'.
  3. 我们可以使用单个text列,但查询不会很好.

我们有什么选择吗?我们目前正倾向于一对整数列.

编辑:

为什么不存储出生日期 - 必须是有效的日期 - 并从那里开始?

隐私 - 这是一项可选功能,我们不希望要求提供超出需要的个人信息.

Erw*_*ter 7

只需使用任意的leapyear存储日期,并在SELECTs中根据需要对其进行格式化.
我有很多案例我都是这样做的.这比其他所有想法都容易得多.

问题编辑后更新

如果出生年份是可选的,则日期具有额外的优势,即如果您拥有年份,则可以存储年份 - 日期列需要相同的4个字节.使用任意的leapyear,否则对于没有一年的日期是不可能的.像2400或1804.

  • 如果您(意外地?)将其转换为Unix风格的时间戳,将其存储为2400或1804可能会导致问题.1972年没有这个问题,但它的缺点是很容易成为有效的生日.2036避免了这两个问题,但直到你开始在数据库中获得2036年出生的人.也许用1972加上一个标志告诉你这一年是否有效? (3认同)