存储日期,可选月/日
我想在Postgres数据库中存储日期。
唯一的问题是这个日期可以有可选的日期甚至是月份。
例:
用户提供他受雇的时间段 – 不是必需的完整日期(日+月+年),而只是开始年份和结束年份。
然而,有些用户在同一年只从5月到10月工作,所以也必须提供月份。
如何处理这种可选的日期部分?
无论如何,请使用正确的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
如果需要,您还可以存储指示年/月/日的精确标记。
虽然接受的答案是好的,但还有另一种选择。
ISO 8601
ISO 8601标准为各种日期时间值的文本表示定义了合理的格式。
一年以明显的方式呈现,一个四位数字: 2014
一年的月份用所需的连字符表示: 2014-01
请注意,在其他ISO 8601格式中,连字符是可选的。 但不是一年一个月,以避免歧义。
完整日期类似: 2014-08-21
或没有可选连字符: 20140821
。 我建议保留连字符。
因此,您可以将值存储为文本。 文本长度会告诉您它是仅年份,年月还是日期。
- 连接被拒绝(PGError)(postgresql和rails)
- Rails通过现有数据库进行迁移
- 请求卡在PG :: Connection #async_exec中
- 有没有办法将Rails默认时间戳更改为Ymd H:i:s(而不是Ymd H:i:su)或laravel忽略Ymd H的小数部分:i:su?
- validation有条件时,数据库中的唯一性validation
- Postgres查询来计算匹配的字符串
- Rails – postgres上的gmaps4rails gem
- 相当于Postgres中的strftime
- Rails 5 db migration:如何修复ActiveRecord :: ConcurrentMigrationError