2015-01-27 9 views
1

DB에 날짜 필드의 값을 가져 오는 테이블이 있습니다.이 날짜 값을 커서에 저장합니다. 현재 날짜 값은 DD : MON : YY 형식입니다. 이제 to_char 함수를 사용하여이 날짜를 문자로 변환하여 시간 00:00:00을 추가합니다. 이제 다시 날짜 형식으로 변환을 시도했지만 타임 스탬프가 추가되지 않고 날짜 형식이 주어진 것처럼 (형식이 DB의 날짜 필드와 동일합니다.) to_char 함수가 올바른 형식을 반환합니다. 주셨다.to_date 함수에 HH : MI : SS 추가

cursor cur is 
select to_char(STV_FROM_DATE,'DD:MON:YYYY:')STV_FROM_DATE :---from a table in DB 
cur1 cur%rowtype; 
begin 
open cur; 
loop 
fetch cur into cur1; 
dbms_output.put_line(cur_1.STV_FROM_DATE); 

이 같이 제대로 값을주고있다으로 커서를 초기화 : 다음과 같이

코드 조각의 일부

은 지금은 타임 스탬프 00을 추가
01:JAN:2000: 
01:JAN:2000: 
01:JAN:2000: 
01:JAN:2000: 

: 00:00을 입력하고 to_date 작업을 다음과 같이 수행했습니다.

STV_FROM_DATE_BC := cur_1.STV_FROM_DATE; 
STV_FROM_DATEBCKUP:=to_date(STV_FROM_DATE_BC,'DD:MM:YY:HH24:MI:SS'); 
dbms_output.put_line(STV_FROM_DATEBCKUP); 
얻은

결과는 다음과 같습니다

01-JAN-00 
01-JAN-00 
01-JAN-00 

은 누구도 날이 문제를 해결하고 최신의 타임 스탬프를 추가 문자를 변환하는 데 도움이 수 있을까요?

+0

당신은 다시 to_char 함수를 사용해야한다. – Exhausted

+0

빠른 응답을 위해 Sathya에게 감사한다. –

+0

하지만 문제는 다시이 새로운 값을 날짜 필드의 DB에 업데이트해야한다는 것입니다. –

답변

2

DBMS_OUTPUT입니다. 디스플레이입니다. 따라서 DATE을 표시하려면 TO_CHAR이 필요합니다.

STV_FROM_DATEBCKUP : = to_date (STV_FROM_DATE_BC, 'DD : MM : YY : HH24 : MI : SS'); dbms_output.put_line (STV_FROM_DATEBCKUP);

항상 YY을 사용하지 4 자리 전체 년 YYYY을 언급 마십시오. Y2K 버그를 다시 소개하고 싶지 않습니다. 위의 경우 날짜 값을 표시하려고했지만 표시 할 형식 모델 은 언급하지 않았습니다. 따라서 TO_CHAR을 적절한 형식 모델과 함께 사용하십시오. 적절한 형식 모델을 제공하지 않고

이유, 당신의 클라이언트는 당신의 로케일 고유의 NLS 설정에 따라 표시한다. 예를 들어 sysdate 만 표시하면 v $ parameters에 나와있는 형식이 표시됩니다. 내 NLS_DATE_FORMAT이 DD-MON-RR 때문에

SQL> select parameter, value from v$nls_parameters where parameter='NLS_DATE_FORMAT'; 

PARAMETER   VALUE 
-------------------- -------------------- 
NLS_DATE_FORMAT  DD-MON-RR 

SQL> select sysdate from dual; 

SYSDATE 
--------- 
27-JAN-15 

SQL> 

그래서, 나는, SYSDATE로 27-JAN-15을 얻었다. 시스템 수준이나 세션 수준에서 설정할 수 있습니다.

SQL> alter session set NLS_DATE_FORMAT='DD:MM:YYYY:HH24:MI:SS'; 

Session altered. 

SQL> select sysdate from dual; 

SYSDATE 
------------------- 
27:01:2015:11:54:07 

SQL> 

따라서 NLS_DATE_FORMAT에 맞는 형식 모델을 설정할 수 있습니다.테스트 사례를 보자 -

SQL> set serveroutput on 
SQL> DECLARE 
    2 STV_FROM_DATE_BC VARCHAR2(20); 
    3 STV_FROM_DATEBCKUP DATE; 
    4 BEGIN 
    5 STV_FROM_DATEBCKUP:= NULL; 
    6 STV_FROM_DATE_BC :='01:JAN:2000:'; 
    7 STV_FROM_DATE_BC :=STV_FROM_DATE_BC||'00:00:00'; 
    8 dbms_output.put_line('Input date literal = '||STV_FROM_DATE_BC); 
    9 STV_FROM_DATEBCKUP:=to_date(STV_FROM_DATE_BC,'DD:MON:YYYY:HH24:MI:SS'); 
10 dbms_output.put_line('Date without format model = '||STV_FROM_DATEBCKUP); 
11 dbms_output.put_line('Date with proper format model = '||TO_CHAR(STV_FROM_DATEBCKUP,'DD:MM:YYYY:HH24:MI:SS')); 
12 END; 
13/
Input date literal = 01:JAN:2000:00:00:00 
Date without format model = 01-JAN-00 
Date with proper format model = 01:01:2000:00:00:00 

PL/SQL procedure successfully completed. 

SQL> 
+0

감사합니다. Lalit.It는 문제가 해결 된 것처럼 보입니다. –

+0

의견을 보내 주셔서 감사합니다. 문제가 해결 되었다면 답을 표시하십시오. –

+1

절대로 YY *를 사용하지 마십시오. –