2012-11-02 3 views
2

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은/년의 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 

추신 : to_date 대신 to_char를 시도했지만 전혀 작동하지 않았습니다. ,


예, 나는 알고 'DATE 데이터 타입 날짜와 시간을 모두 포함'해요,하지만, 별도의 표에 을 날짜와 시간을 보여주는은 주장 교수 그리고 내가 전에 솔루션을 본 적이 그러나 나를 위해, 그것은 테이블에 '값 삽입'이 아닌 쿼리입니다.

그래서 어떻게하면 테이블에 날짜와 시간을 직접 표시 할 수 있는지 알고 싶습니다.

+0

원하는 결과가 있습니까? – madth3

답변

0

Oracle DATE 유형은 DATE 및 TIME 정보를 모두 포함합니다 (표준 DATE, TIME 및 TIMESTAMP 유형이 추가 될 때 SQL-92 표준 이전이기 때문에). 따라서 테이블에서 그들을 분리 할 수는 없습니다. 그렇게 할 이유가 없습니다. 원하는 경우 날짜 필드를 별도의 날짜 전용 및 시간 전용 표시 필드로 표시하는보기를 만들 수 있습니다.

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' 
0

오라클에 해당하는 유형이 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 
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()

관련 문제