【发布时间】:2012-04-26 08:48:59
【问题描述】:
我有一张包含超过 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。 还有很多特殊情况,比如没有设置年份,但设置了月份和日期,我的计划是将年份设置为 0000。 还有一些情况,所有三个字段都是空的。还有能提供一些好的建议的人吗?
【问题讨论】:
-
您在介绍性叙述和光标代码之间混淆了
table1和table2(并没有注意到您仍然在SET IDENTITY_INSERT中包含了一个真实的表名)。但我已经清理了代码格式。
标签: sql database cursor datetime2