3

我对 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)
);

--"工具"=>"首选项"=>"日期格式: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

4 回答 4

3

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'
于 2012-11-02T00:35:25.493 回答
1

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

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

这将允许存储一个时间段,其中 DAY 分量的精度为 0,而 SECOND 分量的精度为 3 个小数点。插入示例是:

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

这种方法的优点在于它会自动以直观的格式显示 SELECT 的结果,而无需进行转换:

SQL> SELECT * FROM foo;

BAR
---------------------------------------------------------------------------
+0 01:01:01.333
于 2017-03-10T21:29:43.987 回答
1

但坚持在表格中分别显示日期和时间的是教授

虽然这听起来像是一个非常愚蠢的要求,但您可以做的一件事是创建两个计算列,将日期和时间显示为 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()

于 2017-03-10T22:10:08.003 回答
0

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

于 2012-11-02T00:29:44.340 回答