当前位置: 首页 > 知识库问答 >
问题:

如何使用PostgreSQL和Ruby on Rails存储持续时间?

海灵均
2023-03-14

我们希望用户注册他们从事某项工作的时间。例如,假设我为一个项目工作了两个半小时,然后我想用2:30(两小时三十分钟)填写表单输入,并将其存储在数据库中。同样的时间是1:45——一小时四十五分钟——来接另一个案子。然后,我们将使用该信息计算应分配给该活动的金额。

例如,如果一小时是10美元,那么:

    < li>15分钟-

我们是否应该将<code>2:30

谢谢!

共有3个答案

韦德厚
2023-03-14

对于Postgres,我会考虑使用区间数据类型,例如:

t=# with t(v) as (values('2:30'::text),('2 12:31:00'::text),('38 hours 21 minutes 4 seconds'))
select v, v::interval,justify_interval(v::interval),extract(epoch from v::interval) from t;
               v               |        v        | justify_interval | date_part
-------------------------------+-----------------+------------------+-----------
 2:30                          | 02:30:00        | 02:30:00         |      9000
 2 12:31:00                    | 2 days 12:31:00 | 2 days 12:31:00  |    217860
 38 hours 21 minutes 4 seconds | 38:21:04        | 1 day 14:21:04   |    138064
(3 rows)
柯昆杰
2023-03-14

怎么样?

Time.parse("0:15").seconds_since_midnight / 3600 * 10 => 2.5

就我个人而言,我会存储秒数而不是时间类型。

游鸣
2023-03-14

最好避免离散值的浮点。由于对您来说,最小有意义的值是分钟,因此我建议将时间存储在其中。存储秒数提供了不必要的分辨率(更多数据),而存储小时数要么让你存储小数,要么意味着你没有足够的精度。

如何存储该值取决于您使用的是哪个版本的Rails。如果是5.1,Postgres中有对区间列类型的本机支持。如果你有它,我会使用它,但如果你没有它不是一个dealbreaker,只是使用一个整数列。

 类似资料:
  • 我正在开发一个迁移软件,它将使用来自REST服务的未知数据。 我已经考虑过使用MongoDB,但我决定不使用它,而是使用PostgreSQL。 读完本文后,我试图在我的SpringBoot应用程序中使用SpringJPA实现它,但我不知道在我的实体中映射。 我试过了,但什么也不懂! 这里就是我所在的地方: 和... 下表: 我该怎么做? 注意:我不想/不需要一个实体来工作。我的JSON将永远是St

  • 我遇到了一个问题,我的MySQL表有一个存储UTC时间偏移的字段。该字段为时间类型。这是出于遗留原因,我无法将列类型更改为更好的表示形式。然而,MySQL支持这一点。它允许用户在时间字段中存储负值,以表示负时差。我使用querydsl生成实体类,并将该字段映射到java。sql。时间物体。现在,当DB中有负值时,我面临一个问题。爪哇。sql。Time类将任何负值转换为前一天的时间。例如,如果DB中

  • 问题内容: 我需要计算用户在网站上花费的时间。登出时间与登出时间之间的区别是,给我类似“ X先生花了4个小时43分钟”。因此,为了存储the4小时43分钟,我这样声明: 时间NOT NULL 这是有效的还是更好的存储方式?我需要存储在数据库中,因为我还有其他计算需要将其用于+其他用例。 问题答案: 最好将其存储为整数秒数。 该会是干净和简单-即 正如Tristram所指出的,使用该字段存在局限性

  • 问题内容: 我需要以分钟/秒为单位存储歌曲持续时间,我需要使用TIME,但是在编写INSERT语句时如何指代某个持续时间?我表中的数据类型已经是TIME,我应该只将STR_TO_DATE字符串值“ 4:29”吗? 问题答案: 首先,在这里看看:http : //dev.mysql.com/doc/refman/5.0/en/time.html 将缩写值分配给TIME列时要小心。MySQL将冒号的缩

  • 有什么方法可以在持续时间对象上使用moment.js方法吗?我在文档中的任何地方都找不到它,它也不是持续时间对象的属性。 我希望能够做到以下几点: 此外,如果有任何其他库可以轻松容纳这种功能,我会对推荐感兴趣。 谢谢