PostgreSQL中日期和时间的数据类型是什么



我知道数据类型是TIMESTAMP、DATE、TIME等。我也知道我应该使用TIMESTAMP,因为它可以跟踪任何更改。

我从前端带来了日期,在我的反应组件中,日期是

const dateTime = new Date().toLocaleString("en-GB")

其输出为"0";2021年10月24日14:37:49";

如果我将数据类型设置为TIMESTAMP,就会出现错误。

问题是,接受上述日期和时间格式的数据类型应该是什么。我尝试过DATETIME,但它给出了一个错误,说DATETIME不存在。SQL查询:

ALTER TABLE user_info_2 ADD date_col1 TIMEDATE;

我是PostgreSQL的新手,所以任何帮助都将不胜感激。

问题不在于格式本身,而是PostgresDatestyle的默认日期顺序是:

--Note the MDY date ordering
show datestyle ;
DateStyle 
-----------
ISO, MDY
select '24/10/2021, 14:37:49'::timestamptz;
ERROR:  date/time field value out of range: "24/10/2021, 14:37:49"
LINE 1: select '24/10/2021, 14:37:49'::timestamptz;
---Change date ordering to put date first
set datestyle = iso,DMY;
show datestyle ;
DateStyle 
-----------
ISO, DMY
(1 row)
select '24/10/2021, 14:37:49'::timestamptz;
timestamptz       
------------------------
2021-10-24 14:37:49-07

所以你有两个选择:

  1. 在postgresql.conf中"永久"更改DateStyle,或使用set datestyle = iso,DMY;临时更改每个会话

  2. 使用ISO格式:

select '2021-10-24, 14:37:49'::timestamptz;
timestamptz       
------------------------
2021-10-24 14:37:49-07

我想说2)是首选,因为Postgres不存储格式,所以如何输入数据确实很重要。如果日期排序对用户很重要,那么在向用户显示输出时,请使用适当的格式。

正如我所看到的,使用Date().toLocaleString()将返回一个字符串类型。您应该使用要持久化的Date对象。对于Postgres中的列类型,请使用TIMESTAMP。
typeof(Date().toLocaleString("en-GB"))

输出将为"字符串"。。。