2017-11-11 159 views
0

我有一个字段,给我时间,它是这样表示:SQL,添加在日期栏的时刻领域

7:00 AM

的问题是,当我尝试添加它到应该包含时间的列,由于格式错误,它给了我错误。

我试图改变使用to_char的格式,但它给我一个错误说该函数没有实现。

这里是代码。

CREATE TABLE call_info 
(
    call_id NUMBER(4) 
    CONSTRAINT cio_call_id_CK CHECK (call_id >= 1000 AND call_id <= 9999), 
    report_first VARCHAR2(10), 
    report_last VARCHAR2(11) CONSTRAINT cio_report_last_NN NOT NULL, 
    report_date DATE CONSTRAINT cio_report_date_NN NOT NULL, 
    report_time DATE CONSTRAINT cio_report_time_NN NOT NULL, 
    problem_code NUMBER(1) CONSTRAINT cio_problem_code_NN NOT NULL, 
    service_code VARCHAR2(4), 
    CONSTRAINT cio_call_id_PK PRIMARY KEY (call_id), 
    CONSTRAINT cio_problem_code_FK FOREIGN KEY (problem_code) 
    REFERENCES problems(code), 
    CONSTRAINT cio_service_code_FK FOREIGN KEY (service_code) 
    REFERENCES services(code) 
) 
; 

BEGIN 
INSERT INTO call_info 
VALUES ('1102','Bill','Madden',TO_DATE('29-OCT-17','DD-MON-YY'),TO_CHAR(TO_DATE('7:00 PM','hh:mi AM'),'hh:mi-AM'),'2','PSEG'); 
INSERT INTO call_info 
VALUES ('1103','Anita','Verno',TO_DATE('29-OCT-17','DD-MON-YY'),TO_CHAR(TO_DATE('7:01 PM','hh:mi AM'),'hh:mi-AM'),'2','PSEG'); 
INSERT INTO call_info 
VALUES ('1200','Emily','Vandalovsky',TO_DATE('29-OCT-17','DD-MON-YY'),TO_CHAR(TO_DATE('7:45 PM','hh:mi AM'),'hh:mi-AM'),'2','PSEG'); 
INSERT INTO call_info 
VALUES ('1111','Gary','Correa',TO_DATE('29-OCT-17','DD-MON-YY'),TO_CHAR(TO_DATE('8:10 PM','hh:mi AM'),'hh:mi-AM'),'1','DPR'); 
INSERT INTO call_info 
VALUES ('1101','Mickey','Mouse',TO_DATE('29-OCT-17','DD-MON-YY'),TO_CHAR(TO_DATE('11:00 PM','hh:mi AM'),'hh:mi-AM'),'6','PSEG'); 
INSERT INTO call_info 
VALUES ('1012','Minnie','Mouse',TO_DATE('29-OCT-17','DD-MON-YY'),TO_CHAR(TO_DATE('11:21 PM','hh:mi AM'),'hh:mi-AM'),'1','DPR'); 
INSERT INTO call_info 
VALUES ('1013','Goofy','Disney',TO_DATE('29-OCT-17','DD-MON-YY'),TO_CHAR(TO_DATE('11:47 PM','hh:mi AM'),'hh:mi-AM'),'5','OEM'); 
INSERT INTO call_info 
VALUES ('1040','Donald','Duck',TO_DATE('30-OCT-17','DD-MON-YY'),TO_CHAR(TO_DATE('2:34 AM','hh:mi AM'),'hh:mi-AM'),'4','OEM'); 
INSERT INTO call_info 
VALUES ('1501','Cinderella','Disney',TO_DATE('30-OCT-17','DD-MON-YY'),TO_CHAR(TO_DATE('3:15 AM','hh:mi AM'),'hh:mi-AM'),'3','CSH'); 
INSERT INTO call_info 
VALUES ('1506','Ernie','Sesame',TO_DATE('30-OCT-17','DD-MON-YY'),TO_CHAR(TO_DATE('3:16 AM','hh:mi AM'),'hh:mi-AM'),'3','CSH'); 
INSERT INTO call_info 
VALUES ('1007','Burt','Sesame',TO_DATE('30-OCT-17','DD-MON-YY'),TO_CHAR(TO_DATE('3:18 AM','hh:mi AM'),'hh:mi-AM'),'3','CSH'); 
INSERT INTO call_info 
VALUES ('1081','Bruce','Springsteen',TO_DATE('30-OCT-17','DD-MON-YY'),TO_CHAR(TO_DATE('4:10 AM','hh:mi AM'),'hh:mi-AM'),'2','PSEG'); 
INSERT INTO call_info 
VALUES ('1910','Chris','Christie',TO_DATE('30-OCT-17','DD-MON-YY'),TO_CHAR(TO_DATE('4:25 AM','hh:mi AM'),'hh:mi-AM'),'7','OEM'); 
INSERT INTO call_info 
VALUES ('1010','Mitt','Romney',TO_DATE('30-OCT-17','DD-MON-YY'),TO_CHAR(TO_DATE('5:15 AM','hh:mi AM'),'hh:mi-AM'),'1','DPR'); 
INSERT INTO call_info 
VALUES ('1015','Barack','Obama',TO_DATE('30-OCT-17','DD-MON-YY'),TO_CHAR(TO_DATE('5:17 AM','hh:mi AM'),'hh:mi-AM'),'1','DPR'); 
INSERT INTO call_info 
VALUES ('1019','Bruce','Wayne',TO_DATE('30-OCT-17','DD-MON-YY'),TO_CHAR(TO_DATE('7:57 AM','hh:mi AM'),'hh:mi-AM'),'5','OEM'); 
INSERT INTO call_info 
VALUES ('1314','Minas','Kousoulis',TO_DATE('30-OCT-17','DD-MON-YY'),TO_CHAR(TO_DATE('8:01 AM','hh:mi AM'),'hh:mi-AM'),'4','WTR'); 
END; 

请注意这个日期数据类型不能被改变为不同的一种。

谢谢您的关注。

Danilo

+2

你在一个单独的领域存储时间?你应该把这两个列放在一个列中。 –

+0

该作业必须实际将其放在单独的列中。我希望它是一样的,它会让我的生活更轻松。 –

+0

无论如何,你应该把它们放在一列中。您可以分割日期和时间,例如虚拟列或视图。 –

回答

0

你为什么要把时间存储在一个单独的字段?你知道DATE有一个“时间”组件吗?分离领域几乎从来没有有意义:

CREATE TABLE call_info (
    call_id NUMBER(4) 
    CONSTRAINT cio_call_id_CK CHECK (call_id >= 1000 AND call_id <= 9999), 
    report_first VARCHAR2(10), 
    report_last VARCHAR2(11) CONSTRAINT cio_report_last_NN NOT NULL, 
    report_datetime DATE CONSTRAINT cio_report_date_NN NOT NULL, 
    problem_code NUMBER(1) CONSTRAINT cio_problem_code_NN NOT NULL, 
    service_code VARCHAR2(4), 
    CONSTRAINT cio_call_id_PK PRIMARY KEY (call_id), 
    CONSTRAINT cio_problem_code_FK FOREIGN KEY (problem_code) 
    REFERENCES problems(code), 
    CONSTRAINT cio_service_code_FK FOREIGN KEY (service_code) 
    REFERENCES services(code) 
); 

那么我会建议将利用甲骨文TIMESTAMP关键字值:

INSERT INTO call_info (call_id, report_first, report_last, report_datetime, problem_code, service_code) 
    VALUES (1102, 'Bill', 'Madden', TIMETAMP '2017-10-29 19:00:00', 
2, 'PSEG'); 

请注意,我也删除周围的号码单引号和insert列出所有列。

+0

据我所知,在这种情况下,我猜想满足有两栏的要求(它是在练习的要求中指定的),我总是可以复制日期和时间(创建2栏只有日期,另一栏有日期和时间时间),然后当用select语句调用两列时,我只是得到记录的一部分。 我认为这可以做到。 –