Oracle - 分开时间和日期

时间:2012-11-02 00:15:08

标签: sql oracle

我对Oracle有疑问(我已经安装了Oracle 11g Express Edition)。 我想插入“日期”和“时间”的值,但我无法将它们分开。

create table Match 
(
    numMatch number(2) constraint PKMatch primary key,
    dateM date, 
    heureM date,
    numE_Eq number(2),
    numE_Eq2 number(2),
    nomTerrain varchar2(30)
);

- “tools”=>“preferences”=>“格式日期:DD / MM / YYYY HH24:MI:SS”

insert into Match values (1,to_date
('10/12/2010','DD/MM/YYYY'),to_date('15:00:00','HH24:MI:SS'),1,3,'Stade Argentina'
);

结果:

dateM: 10/12/2010 00:00:00

heureM: 01/11/2012 15:00:00

PS:我尝试过to_char而不是to_date,但它根本不起作用。


是的,我知道'DATE数据类型包含日期和时间',但是教授坚持在表格中分别显示日期和时间, 我以前见过你的解决方案,但对我来说,这是一个查询,而不是在表格中“插入值”。

所以我想知道怎样才能有一张表直接显示日期和时间。

4 个答案:

答案 0 :(得分:2)

Oracle没有TIME数据类型。您可以使用时间组件存储DATE,只根据时间进行查询,并根据时间显示。

select to_char(my_date_field, 'HH24:MI:SS') 
from my_table
where to_date(my_date_field, 'HH24:MI') = '18:51';

或者,您可以将午夜的秒数存储为整数,并计算一天中的时间。我认为它还可以更容易地查询范围时间。

此外,在会话中,执行以下操作以使所有日期按您希望的方式格式化:

alter session set nls_date_format = 'YYYY-MM-DD HH24:MI:SS'

答案 1 :(得分:0)

Oracle DATE类型包括DATE和TIME信息(因为它在添加标准DATE,TIME和TIMESTAMP类型时,它早于SQL-92标准)。所以,你不能在表格中将它们分开;也没有理由这样做。如果您愿意,可以创建一个视图,将DATE字段显示为单独的仅日期和仅限时间显示字段。

答案 2 :(得分:0)

在Oracle中表示TIME等效类型的另一种方法是使用INTERVAL类型,例如:

SQL> CREATE TABLE foo (
       bar INTERVAL DAY(0) TO SECOND(3)
     );

这将允许存储DAY组件的0精度的时间段,以及SECOND组件的3个小数点。 INSERT示例是:

SQL> INSERT INTO foo VALUES ('0 01:01:01.333');

这种方法的优点在于它能够以直观的格式自动呈现SELECT的结果而无需转换:

SQL> SELECT * FROM foo;

BAR
---------------------------------------------------------------------------
+0 01:01:01.333

答案 3 :(得分:0)

  

但是教授坚持在表格中单独显示日期和时间

虽然这听起来像是一个非常愚蠢的要求,但您可以做的一件事是创建两个计算列,将日期和时间显示为varchar列:

create table match 
(
  nummatch number(2) constraint pkmatch primary key,
  the_date date,
  datem generated always as to_char(the_date, 'yyyy-mm-dd'),
  heurem generated always as to_char(the_date, 'hh24:mi')
  nume_eq number(2),
  nume_eq2 number(2),
  nomterrain varchar2(30)
);

insert into Match (nummatch, the_date, nume_eq, nume_eq2, nomterrain) 
values 
(1,to_date('10/12/2010 15:00:00','DD/MM/YYYY hh24:mi:ss'),1,3,'Stade Argentina');

然后一个

select *
from match;

将返回:

NUMMATCH | THE_DATE            | DATEM      | HEUREM | NUME_EQ | NUME_EQ2 | NOMTERRAIN     
---------+---------------------+------------+--------+---------+----------+----------------
       1 | 2010-12-10 15:00:00 | 2010-12-10 | 15:00  |       1 |        3 | Stade Argentina

或者您可以使用to_char()

在表格上创建一个分隔日期和时间的视图