[英]Making a datetime2 from three fields in Ms SQL Server 2008
我有一張巨大的桌子,里面有超過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
光標看起來像這樣,但最有趣的是將三個字段解析為新的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。還有一些特殊情況,例如設置了年aint,但是設置了月和日,並且我的計划是僅將年份設置為0000。在某些情況下,所有三個字段都為空。 可以提供一些好的建議的人嗎?
你想達到什么目的? 如果有壞數據輸入,您想輸出什么數據? 另外,因為沒有年份0 ,所以沒有“年份0000”。 這使您處於一個有趣的位置:如果您故意創建假日期,您打算如何處理它們? 如果您有一個月零一天,則可以按月和日(某種程度)對數據進行分組,但是當某人想要查找最早或最新記錄時會發生什么呢? 哎呀。 真的不能那樣做。
13.8萬行實際上很小,所以我想知道您是否有日志或周圍的任何東西可以讓您重建丟失的數據? 試圖從壞數據中創建“好”數據幾乎總是意味着有人會來,並假設您的數據不是可靠的。 確定這些數據的用例,並嘗試找出哪些數據不適合使用不完整的數據,然后從那里繼續進行。
此外,您是否可以選擇刪除數據錯誤的行? 假設日期很重要,您可能無法對它們進行任何處理。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.