如何根据日期类型列的行值编写所有更新?

时间:2013-07-05 13:46:35

标签: ruby-on-rails-3 postgresql

我在ReminderDetail模型中有datetime列数据类型,我想要update_all属于该列的值。我写了下面的查询

ReminderDetail.update_all("reminder_date = date(reminder_date) - 1) 

但它更新如下:

Before 2013-07-05 06:37:00 
After 2013-07-04 00:00:00

我想只更新日期,而不是小时。我想喜欢2013-07-04 06:37:00或者我可以为现有数据添加一些秒数吗?任何人都可以建议吗?

2 个答案:

答案 0 :(得分:0)

这是因为您将值转换为date值,这会删除时间部分。您可以改为使用Postgres'INTERVAL方法:

ReminderDetail.update_all("reminder_date = reminder_date - INTERVAL '1 day'")

答案 1 :(得分:0)

date(remainder_date)将仅选择日期部分并将其减少1.因此,此处您的日期部分将变为2013-07-04,但由于时间部分已被剥离,因此插入零。 您可以使用 date_sub sql方法。

更改

ReminderDetail.update_all("reminder_date = date(reminder_date) - 1")

ReminderDetail.update_all("reminder_date = date_sub(reminder_date, INTERVAL 1 day)")

使用 date_add date_sub ,您可以修改年,月,日,小时,分钟,秒等。