有没有办法让 CURRENT_TIMESTAMP 只在数据库中存储日期、小时和分钟?

Is there a way to get CURRENT_TIMESTAMP to only store date, hours and minutes in a database?

我将数据存储在 PostgreSQL 中,其中一列设置为默认值 CURRENT_TIMESTAMP。我试图让这个默认值只存储:日期、小时和分钟。有谁知道我该怎么做?

我需要能够使用 Ruby 操作数据,然后将其显示在 html 页面上。目前我可以显示这样的时间戳:2019-09-15 12:50:05.745811 但我想要更像这样的东西:2019-09-15 12:50.

目前我正在将 table 的每一行提取到 Ruby 对象中,并将每个值定义为可访问的实例变量,因此 @id = id@content = content@timestamp = timestamp。我想要一种方法来编辑这样的字符串: ruby 中的 2019-09-15 12:50:05.745811 或者我想可能更容易找到 DEFAULT CURRENT_TIMESTAMP 仅存储相关数据的方法。任何帮助,非常感谢。

这就是我的 table 的创建方式:

CREATE TABLE my_table (
  id SERIAL PRIMARY KEY, 
  content VARCHAR(280), 
  timestamp timestamp DEFAULT CURRENT_TIMESTAMP
);

使用 to_char() 删除分钟后的所有内容并使用 to_timestamp() 转换回 timestamp:

CREATE TABLE my_table (
  id SERIAL PRIMARY KEY, 
  content VARCHAR(280), 
  timestamp timestamp DEFAULT to_timestamp(to_char(current_timestamp, 'YYYY-MM-DD HH24:MI'), 'YYYY-MM-DD HH24:MI')
);

参见demo

如果您总是希望您的日期分辨率只到秒,那么您可以在定义中指定:

CREATE TABLE my_table (
  id SERIAL PRIMARY KEY, 
  content VARCHAR(280), 
  timestamp timestamp(0) DEFAULT CURRENT_TIMESTAMP
);

如果您希望能够处理 and/or 显示小数秒,请在选择时进行转换:

Select ..., timestamp::timestamp(0) ...

当你想显示较少的第二个精度时,你必须使用 to_char(...) 并指定你想要的掩码,所以在你的例子中 2019-09-15 12:50:

select ... to_char(timestamp, 'yyyy-mm-dd hh24:mi:'), ...

恕我直言,将列命名为与数据类型相同的做法是非常糟糕的做法。它 有时会 引起混乱或错误。