2

私は、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 つのフィールドすべてが空の場合もあります。良いアドバイスをくれる人はいますか?

4

1 に答える 1

0

何を達成しようとしていますか?悪いデータが入ってくる場合、どのデータを出していきますか? また、 0年がないので「0000年」もありません。意図的に偽の日付を作成した場合、それらをどうするつもりですか? 月と日がある場合、データを月と日でグループ化できますが (一種)、誰かが最も古いレコードまたは最新のレコードを見つけたい場合はどうなるでしょうか? おっとっと。本当にそれはできません。

13,8K 行は実際には非常に小さいので、不足しているデータを再構築できるログまたは何かが横たわっているのだろうか? 悪いデータから「良い」データを作成しようとすると、ほとんどの場合、誰かがやって来て、信頼できないデータを信頼できると思い込んでしまいます。このデータのユース ケースを特定し、不完全なデータでは機能しないユース ケースを特定し、そこから先に進みます。

また、不良データを含む行を削除するオプションはありますか? とにかく、日付が重要であると仮定すると、それらでできることはあまりないかもしれません.

于 2012-04-26T10:11:08.027 に答える