私は、13,8kを超える行を含む巨大なテーブルをストックしています。そのレイアウトは次のようなものです。
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)
次にカーソルを作成し、実行する前にオフにします
SET IDENTITY_INSERT navneregister on
カーソルはこのように見えますが、興味深いのは、3 つのフィールドを新しい 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 に設定することです。また、3 つのフィールドすべてが空の場合もあります。良いアドバイスをくれる人はいますか?