如何在postgresql中向表中插入值

时间:2015-11-10 11:38:44

标签: sql postgresql

当我尝试向我的表中插入值时,它不起作用,我收到此错误:

ERROR:  invalid input syntax for integer: "regular"
LINE 2: ('100', 'Astronomy Today', '1st publisher', 6, 'regular', 4/...
                                                                   ^

这是我的代码:

CREATE TABLE Subscribes
(cid numeric(5,0),
title varchar (30),
publisher varchar(30),
period integer, 
offer varchar (10), 
sfrom date,
primary key(cid, title, publisher, offer, period),
foreign key(cid) references Customer(cid),
foreign key(title, publisher,offer, period) references Pricing(title, 
publisher,offer, period));


INSERT INTO Subscribes VALUES
('100', 'Astronomy Today', '1st publisher', 6, 'regular', 4/4/2015),
('100', 'Bridal Guide', '3rd publisher', 12, 'regular', 1/5/2015),
('100', 'Click Magazine', '3rd publisher', 6, 'regular', 20/12/2014),
('107', 'Bridal Guide', '3rd publisher', 12, 'regular', 29/4/2015);

PS:我已检查过每个变量,但找不到问题

5 个答案:

答案 0 :(得分:1)

将单引号放在日期周围,如下所示

INSERT INTO Subscribes VALUES
('100', 'Astronomy Today', '1st publisher', 6, 'regular', '2015/4/4')

答案 1 :(得分:0)

有人比我快:)

 CREATE TABLE Subscribes       (cid numeric(5,0), title varchar (30), publisher,varchar(30), period integer, offer varchar (10), sfrom date ....
 INSERT INTO Subscribes VALUES ('100'           , 'Astronomy Today' , '1st publisher'      , 6           , 'regular'           , 4/4/2015)  ..... 

您在插入日期字段时遇到问题,未引用该字段...且格式不正确。你应该使用标准的系统格式,'2015-04-04'或者使用to_date(文本,文本)转换功能从文本到日期里面插入。

答案 2 :(得分:0)

使用INSERT时,您应该注意您编写的代码:

  • 始终明确列出列。
  • 不要用单引号括起数字。
  • 使用适当的日期常量格式。

所以,看起来应该更像这样:

INSERT INTO Subscribes(cid, title, publisher, period, offer, sfrom)
     VALUES (100, 'Astronomy Today', '1st publisher', 6, 'regular', '2015-04-04'), . . .

答案 3 :(得分:0)

要插入日期,请​​使用TO_DATE

以下插页适用于您的情况:

INSERT INTO Subscribes(cid, title, publisher, period, offer, sfrom)
VALUES (100, 'Astronomy Today', '1st publisher', 6, 'regular', TO_DATE('04/04/2015', 'DD/MM/YYYY'))

答案 4 :(得分:0)

29/4/2015不是有效的日期字面值。使用正确的ANSI文字:date '2015-04-29'或使用to_date()函数(我更喜欢ANSI文字,因为它的输入较少)

并且'100'不是数字,而是字符文字。数字不需要单引号。请改用100

您还应始终限定列名称以使语句更加健壮:

INSERT INTO Subscribes  (cid, title, publisher, period, offer, sfrom)

将所有这些结果放在一起会产生以下结果:

INSERT INTO Subscribes 
  (cid, title, publisher, period, offer, sfrom)
VALUES 
(100, 'Astronomy Today', '1st publisher', 6, 'regular', date '2015-04-04'),
(100, 'Bridal Guide', '3rd publisher', 12, 'regular', date '2015-05-01'),
(100, 'Click Magazine', '3rd publisher', 6, 'regular', date '2014-12-20'),
(107, 'Bridal Guide', '3rd publisher', 12, 'regular', date '2015-04-29');