请在SQL / Oracle中创建一个表,如:
CREATE TABLE Visite(
id NUMBER(5) PRIMARY KEY,
dateVisite DATE,
heureVisite DATE);
并插入一行:
Insert into visite values (1, TO_DATE('2018-12-14','yyyy-mm-dd'),TO_DATE('2:5:1','hh24:mi:ss'));
当我选择结果时,我发现了类似的东西:
ID DATEVISI HEUREVIS
---------- -------- ---------- ------------- --------
1 14/12/18 01/02/18
虽然我期待:
ID DATEVISI HEUREVIS
---------- -------- ---------- ------------- --------
1 14/12/18 2:5:1
请有人能为我解释原因吗?如何插入日期:小时:分钟:秒?
答案 0 :(得分:2)
您正在向两列插入DATE
(始终包含日期和时间值)。
TO_DATE('2018-12-14','yyyy-mm-dd')
给出2018-12-14 00:00:00
当您输入没有日期值的DATE时,Oracle会将当月的第一天作为日期,因此TO_DATE('2:5:1','hh24:mi:ss')
给出2018-02-01 02:05:01
默认日期值的确定如下:
年份是当前年份,由SYSDATE返回。
月份是当前月份,由SYSDATE返回。
当天是01(该月的第一天)。
小时,分钟和秒均为0。
您看到14/12/18
resp。 01/02/18
只是因为您NLS_DATE_FORMAT
的当前会话设置似乎是DD/MM/YY
答案 1 :(得分:1)
正如@Kiran建议的那样,您可以在timestamp
类型列中保留日期信息,并在显示时以所需格式进行计算:
create table visite( id number primary key, dateVisite timestamp );
/
insert into visite values(1,to_timestamp('14/12/2018 02:05:01','dd/mm/yyyy hh24:mi:ss'));
/
select id, to_char(dateVisite,'dd/mm/yyyy') dateVisite, to_char(dateVisite,'hh24:mi:ss') heureVisite from visite;
/
ID DATEVISITE HEUREVISITE
-- ---------- -----------
1 14/12/2018 02:05:01