2010-05-27 2 views

답변

1

당신은 텍스트로 두 값을 연결하고,이 같은 날짜에 캐스트 할 수 있습니다 :

update datetime_test 
    set dateandtime = (dateonly || ' ' || timeonly || ':00'):: 
         datetime year to second 
+0

이 솔루션은 열이 모두 하나의 테이블에 있고, 'DBDATE ='Y4MD-'' 일 때 잘 작동합니다. 테이블간에 값을 전송해야하는 경우 INSERT 또는 MERGE 문을 사용하게됩니다. DBDATE가 다른 형식 (예 :'DBDATE = DMY4 /'또는'DBDATE = MDY4 /')으로 설정된 경우 날짜순으로 문자열로 변환하는 형식은 DATETIME으로 다시 변환 될 수 없다는 것을 의미합니다. 캐스트의 형식 요구 사항은 엄격합니다. –

3

기본 문제는 다음과 같습니다 DATETIME에 DATE 변환

  1. 이 - 사용 확장합니다.
  2. DATETIME을 INTERVAL로 변환 - 빼기를 사용합니다.

이 두 개념을 조립 만 SELECT 적용 :

create temp table td(dateonly date not null, timeonly datetime hour to minute); 
insert into td values('2010-05-31', '06:30'); 
select extend(dateonly, year to second) + 
     (timeonly - datetime(00:00) hour to minute) from td; 

그 결과 당신이 원하는 : timeonly에서 자정을 빼면

DATETIME YEAR TO SECOND 
2010-05-31 06:30:00 

는 분으로 간격 시간으로 변환; DATETIME YEAR TO SECOND와 INTERVAL HOUR TO MINUTE를 DATETIME YEAR TO SECOND에 추가 할 수 있습니다. 두 개의 DATETIME 값을 추가 할 수 없습니다. 그래서

, 엄격하게 질문에 대답, 당신은 쓸 것 :

INSERT INTO Test2(DateAndTime) 
    SELECT EXTEND(DateOnly, YEAR TO SECOND) + 
        (TimeOnly - DATETIME(00:00) HOUR TO MINUTE) AS DateAndTime 
     FROM Test1; 

(신뢰성에 관계없이 일정한 날짜를 삽입하려면 예상대로 날짜 리터럴 같이 작동하도록 내가는 DBDate = Y4MD-으로 실행합니다. DBDATE의 설정은 MDY(5,31,2010)입니다.