在postgress中使用时间戳

时间:2017-11-09 05:45:10

标签: sql postgresql

我正在尝试在postgres中构建和填充表格。最终产品看起来应该是my goal

这些是表应该具有的列以及我认为应该使用的数据类型(如果您有更好的拟合数据类型的想法,我想知道它们)。

  • id integer
  • 名称VARCHAR(60)
  • gender VARCHAR(1)
  • 年龄整数
  • intake_date timestamp
  • adoption_date timestamp

我用这个命令创建了表,

pets=# CREATE TABLE cats (
id integer,name text,gender text, age integer, intake_date timestamp, 
adoption_date timestamp);

然后尝试在这个单一命令中添加我的所有行并获得

pets=# INSERT INTO cats (id,name,gender,age, intake_date,adoption_date)
VALUES
(00001, 'Mushi', 'M', 1,2016-01-09, 2016-03-22)
(00002, 'Seashell' , 'F', 7,2016-01-09)
(00003,'Azul', 'M', 3, 2016-01-11, 2016-04-17)
(00004, 'Victoire' ,'M', 7, 2016-01-11, 2016-09-01)
(00005, 'Nala', 'F', 12016-01-12);
ERROR:  syntax error at or near "("
LINE 4: (00002, 'Seashell' , 'F', 7,2016-01-09)

然后我部分地意识到postgres会出现问题,因为有些adoption_date列留空了。所以我试着至少添加一行

pets=# INSERT INTO cats (id,name,gender,age, intake_date,adoption_date)
VALUES
(00001,'Mushi','M', 1, 2016-01-09, 2016-03-22);

并找回错误

ERROR:  column "intake_date" is of type timestamp without time zone but 
expression is of type integer
LINE 3: (00001,'Mushi','M', 1, 2016-01-09, 2016-03-22);
                           ^
HINT:  You will need to rewrite or cast the expression.

所以我的三个问题或未知是

  1. 如何创建一个表格,其列的数据类型为timestamp,在条目处留空?
  2. 我应该如何输入时间戳?
  3. 我应该使用更好的数据类型

1 个答案:

答案 0 :(得分:1)

时间戳数据应在单引号内传递

INSERT INTO cats (id,name,gender,age, intake_date,adoption_date)
VALUES(00001, 'Mushi', 'M', 1,'2016-01-09', '2016-03-22');

如果要插入空白值

,只需使用NULL即可
INSERT INTO cats (id,name,gender,age, intake_date,adoption_date)
VALUES(00002, 'Seashell' , 'F', 7,'2016-01-09',null);

如下所示创建表格(default Null分配给您希望在插入时留空的列

CREATE TABLE cats1 (
id integer
,name text
,gender text
,age integer
,intake_date timestamp
,adoption_date timestamp default Null
);