2012-04-26 3 views
2

나는 13,8k 개가 넘는 거대한 테이블을 준비하고 있습니다. 레이아웃, 뭔가 같은 것입니다SQL Server 2008의 세 필드에서 datetime2 만들기

CREATE TABLE table1(
[id] [int] NOT NULL, 
[regnr] [char](10) NULL, 
[kilde] [char](100) NULL, 
[dd] [char](10) NULL, 
[mm] [char](10) NULL, 
[yyyy] [char](16) NULL, 

)

날짜 부분이 같은 레이아웃을해야합니다 정리, 플러스 중요하지 않은 다른 분야 인 새 테이블.

create table table2(id int primary key identity not null, regnr nvarchar(10), kilde nvarchar(100), dato datetime2) 

나는 다음 커서를 만든 내가 그것을 실행 befor을 나는

SET IDENTITY_INSERT navneregister on 

을 해제 같은 커서 모양이지만 인터 휴식 일이 내가 새로운 DATETIME2에 세 개의 필드의 구문 분석.

declare @id int, @regnr nvarchar(10), @kilde nvarchar(100), @composeddate nvarchar(max), @dd char(10), @mm char(10), @yyyy char(16) 
declare p cursor 
for select id, regnr, kilde, dd, mm, yyyy from table2 
open p 
fetch p into @id, @regnr, @kilde, @dd, @mm, @yyyy 
while @@FETCH_STATUS != -1 
    begin 
    begin 
    if((@mm = '0' or @mm = '00') and (@dd = '0' or @dd = '00') and (@yyyy ='0000')) 
     set @composeddate = null 
    end 
    if(@mm = '0' or @mm = '00') 
     set @mm = '01' 
    if(@dd = '0' or @dd = '00') 
     set @dd = '01' 

    begin 
    if(@yyyy = '') 
     set @composeddate = null 
    else 
     set @composeddate = CAST(CAST(@yyyy AS char(16)) + '-' + CAST(@mm AS char(10)) + '-' + CAST(@dd AS char(10)) AS DATETIME2) 
    end 
    begin 
     insert into table1(id, regnr, kilde, dato) 
     values (@id, @regnr, @kilde, @composeddate) 
    end 
    fetch p into @id, @regnr, @kilde, @dd, @mm, @yyyy 
    end 
close p 
deallocate p 

내가 부분적으로 작동하지만, 예를 들어, 만약 DD = 00 실패 일부 가장자리 경우가있다, mm = 00 yyyy는 0000 또한 어디 년간 아닌가요 세트와 같은 특별한 경우의 부하가, 그러나 월과 일이 설정되어 있고, 내 계획은 0000으로 연도를 설정하는 것입니다. 또한 세 개의 필드가 모두 비어있는 경우도 있습니다. 좋은 조언을 해 줄 수있는 사람?

+0

입문 내러티브와 커서 코드 사이에'table1'과'table2'을 섞어 놓았습니다. (여전히'SET IDENTITY_INSERT'에 실제 테이블 이름이 포함되어 있음을 알지 못합니다.) 하지만 코드 형식을 정리했습니다. 도움을 받으려면 –

답변

0

수행하려는 작업은 무엇입니까? 잘못된 데이터가 들어오는 경우 어떤 데이터를 보내시겠습니까? 또한 there is no year 0이기 때문에 "연도 0000"이 없습니다. 그것은 당신을 흥미로운 위치에 올려 놓습니다. 의도적으로 가짜 날짜를 만드는 경우, 당신은 그들과 무엇을 할 계획입니까? 한 달과 하루가 있으면 월과 일별로 데이터를 그룹화 할 수 있지만, 누군가가 가장 빠 른 레코드 나 최신 레코드를 찾고자 할 때 어떻게됩니까? 죄송합니다. 정말로 그렇게 할 수는 없습니다.

13,8K 행이 실제로 매우 작기 때문에 누락 된 데이터를 재구성 할 수있는 로그 또는 기타 정보가 있는지 궁금합니다. 불량 데이터로부터 "양호한"데이터를 만들려고 시도하는 것은 누군가가 따라 와서 그렇지 않을 때 데이터가 신뢰할 수 있다고 가정한다는 것을 거의 항상 의미합니다. 이 데이터의 유스 케이스를 확인하고 불완전한 데이터로 작업 할 수없는 것을 파악하고 거기에서부터 계속 진행하십시오.

또한 잘못된 데이터가있는 행을 삭제할 수 있습니까? 날짜가 중요하다고 가정하면 어쨌든 당신이 할 수있는 일이 많지 않을 수 있습니다.

+0

Tkx. 그러나 나는 그 문제를 버리고있다. –