使用to_date插入时间

时间:2018-02-22 16:30:34

标签: sql oracle time to-date

请在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

请有人能为我解释原因吗?如何插入日期:小时:分钟:秒?

2 个答案:

答案 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

请参阅DATE Datatype

  

默认日期值的确定如下:

     
      
  • 年份是当前年份,由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