2015-01-25 7 views
0

이 열에 datetime을이 형식으로 저장해야하며 GAME에서 TIME을 선택하면이 형식으로 표시됩니다. 그러나 이것은 잘못된 것입니다. 나 좀 도와 줄 수있어?어떻게 Oracle Database에서 DATETIME을 포맷 할 수 있습니까?

create table GAMES (
     CIS_HRY    INTEGER      not null, 
     NAZEV    VARCHAR2(30)    not null, 
     Date DATE NOT NULL FORMAT 'YYYY-MM-DD', 
     TIME DATE NOT NULL FORMAT 'HH24: MI: SS', 
     POPIS     CLOB, 
    constraint PK_GAMES primary key (CIS_HRY) 
); 
+6

날짜와 같은 기본 형식을 사용하여 날짜/시간 값을 저장합니다. 'to_char()'를 사용하여 문자열로 변환하면 쿼리에 필요한 표현을 얻을 수 있습니다. –

+0

죄송합니다. 저에게 더 바보가 될 수 있습니까? 내가 변환 할 때? 매번 데이트를 원한다면? 또는 영구적으로 변환 할 수 있습니다. –

+0

원하는 형식을 문자열 (NVARCHAR)에 저장할 수 있으며, Oracle 표준 형식에는 형식이 없으므로 선택할 때마다 변환해야합니다. (당신은보기에서 그것을 할 수 있지만주의 깊게, 당신이 결과를 필터링하거나 정렬하고자한다면 인덱스를 사용하지 않을 수도 있습니다). – eckes

답변

5

날짜는 오라클에서 "형식"을 가지고 있지 않습니다 - 그들은 항상 필드 년, 월, 일,시, 분, 초를 포함한다. 특정 상황에서 사용하기 위해 날짜를 추출 할 때 TO_CHAR 함수를 사용하여 날짜의 서식을 지정합니다.

SELECT CIS_HRY, 
     NAZEV, 
     TO_CHAR(CREATED_DATE_TIME, 'DD-MON-YYYY HH24:MI:SS') AS CREATE_DT, 
    FROM GAMES 
    WHERE NAZEV = 'XYZ'; 

공유하고 즐기십시오 : 나는 당신이이 테이블에서 데이터를 가져 오는 때 당신은 날짜 형식을 TO_CHAR를 사용할 수 있습니다

create table GAMES (
     CIS_HRY    INTEGER not null, 
     NAZEV    VARCHAR2(30) not null, 
     CREATED_DATE_TIME DATE NOT NULL, 
     POPIS    CLOB, 
    constraint PK_GAMES primary key (CIS_HRY) 
); 

로 테이블 디자인을 재 작업하는 것이 좋습니다.

1

이 경우 몇 가지 작업을 수행 할 수 있습니다. Oracle 11g 또는 12c를 사용하는 경우 가상 열을 사용하여 VARCHAR2YYYY-MM-DD 형식으로 날짜를 "저장"하고 지정된 형식으로 시간을 저장할 수 있습니다. 또는 실제 열을 사용하여 동일한 작업을 수행하려면 INSERT 또는 UPDATE에 트리거를 사용할 수 있습니다. 당신은, 당신은을 통해 그렇게 할 수 GAMES_V보기에서 "날짜"및/또는 "시간"을 업데이트해야하는 경우

CREATE VIEW games_v AS 
SELECT cis_hry, nazev, TO_CHAR(create_dt, 'YYYY-MM-DD') AS chardate 
    , TO_CHAR(create_dt, 'HH24: MI: SS') AS chartime, popis 
    FROM games; 

: 나 수도 (이것은 아마도 최선의 선택은)보기를 만들는 트리거를 GAMES_V에 설정합니다. 그것은 당신의 목적에 과잉 일 수 있습니다.

그런데 Oracle에서는 열 이름으로 date을 사용하지 않을 것입니다. 예약어입니다. 그리고 당신은 아마 time을 피해야합니다 - 나는 그것이 예약어라고 생각하지 않습니다. 그러나 그것은 일반적이며 매우 설명 적이 지 않습니다.