如何在PostgreSQL的插入查询中插入当前日期和时间

124
INSERT into Group (Name,CreatedDate) VALUES ('Test',UTC_TIMESTAMP(), 1);

这是我用于在MySQL中插入当前日期时间的查询。 当我在PostgreSQL中使用它时,会出现以下错误。

    HINT:  No function matches the given name and argument types. You might need to add explicit type casts.
********** Error **********

ERROR: function utc_timestamp() does not exist
SQL state: 42883

我已经尝试使用now(),但它插入的格式是"2016-07-07 17:01:18.410677"。 我需要以'yyyymmdd hh:mi:ss tt'格式插入。

INSERT into Group (Name,CreatedDate) VALUES ('Test',UTC_TIMESTAMP(), 1);
如何在PostgreSQL的插入查询中插入当前日期时间,使用上述格式?

1
也许搜索CURRENT_TIMESTAMP甚至NOW()。前者至少有精度参数。因此,CURRENT_TIMESTAMP(3)将产生3个子秒数字(毫秒分辨率)。 - Dilettant
1
通过 SET DATESTYLE 进行格式化,例如:在Postgres中,您可以按会话或全局设置时间戳的默认格式吗?,或者在官方的Postgres文档中。 - Dilettant
3
“timestamp”列没有“格式”。您在看到的任何格式都是SQL客户端应用的。如果您想要不同的_display_格式,请更改SQL客户端的配置或使用适当的格式化函数。 - user330315
1
是的,它在MySQL上运行,但现在您想让它在Postgresql上运行,因此您需要在Postgresql手册中寻找等效的函数。 - Clodoaldo Neto
3个回答

176

timestamp(或者datetime列)没有“格式”。

您看到的任何格式都是应用于您正在使用的SQL客户端上的。


要插入当前时间,请使用current_timestamp,如手册中所述

INSERT into "Group" (name,createddate) 
VALUES ('Test', current_timestamp);

要以不同的格式显示该值,请更改SQL客户端的配置或在选择数据时格式化该值:

要以不同的格式显示该值,请更改SQL客户端的配置或在选择数据时格式化该值:

select name, to_char(createddate, 'yyyymmdd hh:mi:ss tt') as created_date
from "Group"

对于psql(默认的命令行客户端),你可以通过配置参数DateStyle来配置显示格式:https://www.postgresql.org/docs/current/static/runtime-config-client.html#GUC-DATESTYLE


如果我使用这个,由于我的日期是时间戳格式,我会得到以下错误。列“createddate”是没有时区的时间戳类型,但表达式是文本类型。 - Shesha
@Shesha 在 insert 查询中不要使用那个。在你的 insert 中使用 current_timestamp - user330315

14

3

您当然可以格式化current_timestamp()的结果。请查看官方文档中的各种格式化函数。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接