【问题标题】:How to store only the time in the database?如何仅将时间存储在数据库中?
【发布时间】:2013-01-01 10:15:23
【问题描述】:

我正在使用 rails 3,我想存储 start_time 和 end_time。由于 rails 不支持日期范围。

我应该使用哪种数据类型来存储没有日期的时间以便以后进行比较?

这是我的数据库架构,其中包含表 Schedules 中的 tsrange 数据类型(我应该使用哪种数据类型来替换它?)。

CREATE TABLE Doctors
(
id INTEGER UNIQUE,
name VARCHAR(size)
);

CREATE TABLE Schedules
(
id INTEGER,
doctor_id INTEGER,
start_time tsrange,
end_time tsrange,
day VARCHAR(size)
);

CREATE TABLE Appointments
(
id INTEGER,
doctor_id INTEGER,
aday DATE
);

【问题讨论】:

  • 所以你只是想代表一个像“9:30 am”这样的值?
  • 是的,我希望能够比较时间。
  • 如果您使用time 格式作为列类型,MySQL(例如)会将其存储为时间,这很好,但 Rails 会将其转换为适当的时间(使用 Time Zone) 并为其附加一个日期和一个时区,这在大多数情况下并不理想。

标签: ruby ruby-on-rails-3 postgresql-9.1


【解决方案1】:

:time 数据类型可能是您正在寻找的。

此外,当我尝试了解 rails 中日期/时间数据类型之间的差异时,这个问题确实帮助了我:

In Ruby on Rails, what's the difference between DateTime, Timestamp, Time and Date?

您还应该考虑使用 datetime 数据类型,并简单地使用 strftime 转换它,例如

 t = Time.now
 t.strftime("%I:%M%p")

这需要一个日期/时间,并简单地格式化为 Hour/Minute/AM|PM,省略日期。

【讨论】:

  • 但是时间数据类型也加了日期,还是不加?
  • 它将存储小时/分钟/秒值。我还在上面编辑了我的问题。
猜你喜欢
  • 1970-01-01
  • 2012-10-04
  • 2022-11-15
  • 2018-07-19
  • 2017-02-02
  • 1970-01-01
  • 1970-01-01
  • 2011-04-17
  • 2021-03-05
相关资源
最近更新 更多