有没有办法让 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:'), ...
恕我直言,将列命名为与数据类型相同的做法是非常糟糕的做法。它 有时会 引起混乱或错误。
我将数据存储在 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:'), ...
恕我直言,将列命名为与数据类型相同的做法是非常糟糕的做法。它 有时会 引起混乱或错误。