我想在Postgres数据库中存储日期 唯一的问题是这个日期可以选择日期甚至是月份。
例:
用户提供他受雇的时间段 - 不是必需的完整日期(日+月+年),而只是开始年份和结束年份。
然而,有些用户在同一年只从5月到10月工作,所以也必须提供月份。
如何处理这种可选的日期部分?
答案 0 :(得分:3)
无论如何都要使用正确的date
类型。 不 存储文本或多列。这将更昂贵,更不可靠。
使用适合您开箱即用的功能的to_date()
功能。例如,如果您使用模式'YYYYMMDD'
调用它并且实际字符串缺少日,月和日的字符,则默认为年/月的第一个月/日:
db=# SELECT to_date('2001', 'YYYYMMDD');
to_date
------------
2001-01-01
db=# SELECT to_date('200103', 'YYYYMMDD');
to_date
------------
2001-03-01
如果需要,您还可以存储指示年/月/日的精确标记。
答案 1 :(得分:2)
虽然accepted answer很好,但还有另一种选择。
ISO 8601标准定义了各种日期时间值的文本表示的合理格式。
一年以明显的方式表示,一个四位数字:2014
年月用必需的连字符表示:2014-01
请注意,在其他ISO 8601格式中,连字符是可选的。但不是为了一年,为了避免歧义。
完整日期类似:2014-08-21
或没有可选连字符:20140821
。我建议保留连字符。
因此您可以将值存储为文本。文本的长度将告诉您它是仅年份,年月还是日期。